COMO PASSAR NA PROVA DA PROCERGS DE 2025 PARA ANALISTA EM COMPUTAÇÃO COM ÊNFASE EM PROGRAMAÇÃO DE SISTEMAS NA TECNOLOGIA MICROSOFT
Conteúdo
- dot net para concurso
- e comercial html
- uml
- docker
- padrões de projeto concurso
- teste de software para concurso público
- questão 49 transações banco de dados
- questão 24 comando sql
- questao 2 acid
- questão 41 windows server
- questão 31 soap
- questão 3 consulta sql
- questão 3 data pump export no oracle
- questão 27 camada tcp ip
- questão 13 entidade relacionamento
- questão 15 sistemas de arquivos
- questão 39 java
- questão 33 programação orientada a objetos
- questão 16 scrum
- questão 20 c-sharp
- questão 36 protocolos de rede
- questão 18 override java
- questão 36 padrão de projeto de software
- poo para iniciantes e concurseiros
- questão 48 linguagem de definição de dados
- questão 43 sistema de arquivos windows e linux
- questão 35 arquitetura de rede
- questão 37 uml
- questão 22 retrospective scrum
- questão 18 testes de software
- questão 19 testes de software
- questão 17 scrum


O que estudar sobre .net para o concurso da PROCERGS de 2025?
Dominando .NET Moderno: Guia Completo para Concursos e Carreira
Este guia vai transformar você em um especialista em .NET, cobrindo desde os fundamentos até tópicos avançados exigidos em concursos como o ANC - Analista em Computação (2025). Vamos usar uma linguagem didática, humanizada e memorável, com exemplos práticos e comparações do mundo real.
C# & .NET 5+/Core – O Coração do Ecossistema
Async/Await: Programação Assíncrona sem Traumas
Problema: Aplicações travam ao acessar bancos de dados ou APIs lentas.
Solução: async/await
permite que seu código "espere" sem bloquear a thread principal.
Solução:
async/await
permite que seu código "espere" sem bloquear a thread principal.Exemplo Prático:
csharppublic async Task<string> BaixarDadosAsync(string url)
{
using HttpClient client = new HttpClient();
string dados = await client.GetStringAsync(url); // Não trava a UI!
return dados;
}
Regra de Ouro:
Todo método async
deve retornar Task
ou Task<T>
.
Use await
para operações demoradas (IO, APIs, bancos de dados).
Analogia:
Imagine um garçom (thread) que entrega pedidos (tarefas) sem ficar parado esperando o cozinheiro (IO).
public async Task<string> BaixarDadosAsync(string url) { using HttpClient client = new HttpClient(); string dados = await client.GetStringAsync(url); // Não trava a UI! return dados; }
Todo método async
deve retornar Task
ou Task<T>
.
Use await
para operações demoradas (IO, APIs, bancos de dados).
Imagine um garçom (thread) que entrega pedidos (tarefas) sem ficar parado esperando o cozinheiro (IO).
LINQ: Consultas Elegantes em C#
O que é? Uma forma de fazer consultas (como SQL) diretamente em coleções ou bancos de dados.
Exemplos:
csharpvar produtosBaratos = produtos
.Where(p => p.Preco < 100)
.OrderBy(p => p.Nome)
.ToList();
// LINQ to SQL (Entity Framework)
var clientesAtivos = db.Clientes
.Where(c => c.Ativo)
.Select(c => new { c.Nome, c.Email })
.ToList();
Tipos de LINQ:
LINQ to Objects (listas em memória).
LINQ to SQL/EF Core (banco de dados).
Dica de Memória:
"LINQ é como um tradutor que converte seu C# em SQL ou filtra listas rapidamente."
var produtosBaratos = produtos .Where(p => p.Preco < 100) .OrderBy(p => p.Nome) .ToList(); // LINQ to SQL (Entity Framework) var clientesAtivos = db.Clientes .Where(c => c.Ativo) .Select(c => new { c.Nome, c.Email }) .ToList();
LINQ to Objects (listas em memória).
LINQ to SQL/EF Core (banco de dados).
"LINQ é como um tradutor que converte seu C# em SQL ou filtra listas rapidamente."
.NET 5 vs .NET Core vs .NET Framework
Versão Quando Usar? Status .NET Framework Legado (Windows only) Obsoleto .NET Core Cross-platform (Linux, macOS) Substituído pelo 5+ .NET 5+ Futuro (unificação) Recomendado
Migrando?
.NET Framework → .NET 6/8 (LTS) para aproveitar performance e containers.
Versão | Quando Usar? | Status |
---|---|---|
.NET Framework | Legado (Windows only) | Obsoleto |
.NET Core | Cross-platform (Linux, macOS) | Substituído pelo 5+ |
.NET 5+ | Futuro (unificação) | Recomendado |
.NET Framework → .NET 6/8 (LTS) para aproveitar performance e containers.
ASP.NET Core (MVC + REST API)
Injeção de Dependência (DI)
Problema: Classes acopladas são difíceis de testar e manter.
Solução: O .NET injeta dependências automaticamente.
Solução: O .NET injeta dependências automaticamente.
Como Implementar?
csharp// 1. Interface (contrato)
public interface IEmailService
{
void Enviar(string mensagem);
}
// 2. Implementação
public class EmailService : IEmailService
{
public void Enviar(string mensagem) => Console.WriteLine(mensagem);
}
// 3. Registrar no container DI (Program.cs)
builder.Services.AddScoped<IEmailService, EmailService>();
// 4. Usar em um Controller
public class PedidoController : Controller
{
private readonly IEmailService _emailService;
public PedidoController(IEmailService emailService) // Injetado!
{
_emailService = emailService;
}
}
Tipos de Ciclo de Vida:
AddSingleton
(1 instância para toda a aplicação).
AddScoped
(1 instância por requisição).
AddTransient
(nova instância a cada chamada).
// 1. Interface (contrato) public interface IEmailService { void Enviar(string mensagem); } // 2. Implementação public class EmailService : IEmailService { public void Enviar(string mensagem) => Console.WriteLine(mensagem); } // 3. Registrar no container DI (Program.cs) builder.Services.AddScoped<IEmailService, EmailService>(); // 4. Usar em um Controller public class PedidoController : Controller { private readonly IEmailService _emailService; public PedidoController(IEmailService emailService) // Injetado! { _emailService = emailService; } }
AddSingleton
(1 instância para toda a aplicação).
AddScoped
(1 instância por requisição).
AddTransient
(nova instância a cada chamada).
Padrão MVC (Model-View-Controller)
Fluxo:
Controller recebe a requisição.
Model (dados) é processado.
View (HTML) é renderizada.
Controller recebe a requisição.
Model (dados) é processado.
View (HTML) é renderizada.
Exemplo:
csharppublic class HomeController : Controller
{
public IActionResult Index()
{
var model = new { Mensagem = "Olá, MVC!" };
return View(model); // Renderiza Views/Home/Index.cshtml
}
}
Dica Visual:
Pense no MVC como um restaurante:
Cliente (Browser) faz pedido.
Garçom (Controller) leva à cozinha.
Cozinha (Model) prepara.
Garçom entrega prato (View).
public class HomeController : Controller { public IActionResult Index() { var model = new { Mensagem = "Olá, MVC!" }; return View(model); // Renderiza Views/Home/Index.cshtml } }
Pense no MVC como um restaurante:
Cliente (Browser) faz pedido.
Garçom (Controller) leva à cozinha.
Cozinha (Model) prepara.
Garçom entrega prato (View).
3. Autenticação JWT (APIs REST)
O que é? Tokens seguros para identificar usuários sem sessão.
Implementação Básica:
csharpbuilder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidIssuer = "seu_dominio.com",
ValidateAudience = true,
ValidAudience = "seu_app",
ValidateLifetime = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("SUA_CHAVE_SECRETA"))
};
});
Fluxo:
Usuário faz login → API retorna JWT.
Cliente envia JWT no header (Authorization: Bearer <token>
).
API valida token e autoriza acesso.
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidIssuer = "seu_dominio.com", ValidateAudience = true, ValidAudience = "seu_app", ValidateLifetime = true, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("SUA_CHAVE_SECRETA")) }; });
Usuário faz login → API retorna JWT.
Cliente envia JWT no header (Authorization: Bearer <token>
).
API valida token e autoriza acesso.
Entity Framework Core (ORM Poderoso)
Migrations: Controle de Versão do Banco
Comandos Essenciais:
bashdotnet ef migrations add Inicial # Cria migration
dotnet ef database update # Aplica ao banco
Exemplo de Migration:
csharppublic class Produto
{
public int Id { get; set; }
public string Nome { get; set; }
}
// Na migration:
migrationBuilder.CreateTable(
name: "Produtos",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Nome = table.Column<string>(nullable: false)
});
dotnet ef migrations add Inicial # Cria migration dotnet ef database update # Aplica ao banco
public class Produto { public int Id { get; set; } public string Nome { get; set; } } // Na migration: migrationBuilder.CreateTable( name: "Produtos", columns: table => new { Id = table.Column<int>(nullable: false) .Annotation("SqlServer:Identity", "1, 1"), Nome = table.Column<string>(nullable: false) });
EF Core vs Dapper: Quando Usar?
EF Core Dapper ORM completo (migrations, LINQ) Micro-ORM (performance bruta) Ideal para CRUD simples Ideal para queries complexas Gera SQL automaticamente Você escreve o SQL
Exemplo Dapper:
csharpusing var conexao = new SqlConnection(connectionString);
var produtos = conexao.Query<Produto>("SELECT * FROM Produtos WHERE Preco > @preco", new { preco = 50 });
Dica:
Use EF Core para 90% dos casos e Dapper para consultas otimizadas.
EF Core | Dapper |
---|---|
ORM completo (migrations, LINQ) | Micro-ORM (performance bruta) |
Ideal para CRUD simples | Ideal para queries complexas |
Gera SQL automaticamente | Você escreve o SQL |
using var conexao = new SqlConnection(connectionString); var produtos = conexao.Query<Produto>("SELECT * FROM Produtos WHERE Preco > @preco", new { preco = 50 });
Use EF Core para 90% dos casos e Dapper para consultas otimizadas.
Conclusão: Sinergia do .NET
Todos esses tópicos trabalham juntos:
C# é a linguagem.
ASP.NET Core usa DI e MVC para web.
EF Core acessa bancos com LINQ.
JWT protege suas APIs.
Próximos Passos:
Baixe o .NET 8.
Crie um projeto com dotnet new webapi
.
Pratique com desafios reais (ex: "CRUD de produtos com autenticação JWT").
"Dominar .NET é como construir um Lego: cada peça (C#, MVC, EF Core) encaixa perfeitamente!"
C# é a linguagem.
ASP.NET Core usa DI e MVC para web.
EF Core acessa bancos com LINQ.
JWT protege suas APIs.
Baixe o .NET 8.
Crie um projeto com dotnet new webapi
.
Pratique com desafios reais (ex: "CRUD de produtos com autenticação JWT").
Dominando .NET: Guia Completo para Concursos e Entrevistas
Se você está se preparando para concursos públicos, processos seletivos ou entrevistas técnicas, entender o ecossistema .NET é essencial. Este guia aborda os principais conceitos de forma didática e memorável, cobrindo desde fundamentos até tópicos avançados como Docker e Kubernetes.
O Que é .NET? Entendendo a Plataforma
O .NET (pronuncia-se "dotnet") é um framework desenvolvido pela Microsoft para construir aplicações modernas, incluindo:
- Aplicações Web (com ASP.NET e Blazor)
- APIs RESTful (para integração entre sistemas)
- Programas Desktop (Windows Forms, WPF)
- Aplicativos Mobile (com Xamarin e MAUI)
- Microsserviços (rodando em containers Docker)
Evolução do .NET
.NET Framework (2002): Primeira versão, só funcionava no Windows.
.NET Core (2016): Versão moderna, cross-platform (Windows, Linux, macOS).
.NET 5+ (2020): Unificação do .NET Core e Framework em uma única plataforma.
Por que isso importa?
Se a prova mencionar ".NET Core", já sabe: é a versão mais moderna e flexível.
Linguagens do .NET: C# é a Estrela
A linguagem principal do .NET é o C# (pronuncia-se "C Sharp"), mas também suporta:
F# (para programação funcional)
VB.NET (mais antigo, menos usado hoje)
Características do C#
- Orientação a Objetos (classes, herança, polimorfismo)
- Tipagem Forte (menos erros em tempo de execução)
- Moderno (suporte a async/await, LINQ, records)
Dica de memorização:
"C# é como um canivete suíço – resolve desde sistemas simples até aplicações complexas com poucas linhas de código."
Entity Framework: O ORM do .NET
Se você já se perguntou:
"Preciso escrever SQL manualmente?"
A resposta é NÃO, graças ao Entity Framework (EF), um ORM (Object-Relational Mapper) que:
- Mapeia tabelas do banco para classes em C#
- Gera consultas SQL automaticamente
- Suporta migrações (atualiza esquema do banco sem perder dados)
Entity Framework vs. Dapper
Entity Framework | Dapper |
---|---|
Mais alto nível (menos código) | Mais rápido (performance otimizada) |
Ideal para CRUD simples | Melhor para queries complexas |
Quando usar?
Se precisar de produtividade, vá de EF.
Se o projeto exige alta performance, considere Dapper.
ASP.NET MVC: O Padrão Web do .NET
Se você já usou Java Spring ou Laravel, o ASP.NET MVC segue uma lógica similar:
Model → Lógica de negócios e dados
View → Interface do usuário (HTML, CSS)
Controller → Recebe requisições e decide o que fazer
Exemplo de fluxo:
Usuário acessa
/produtos
.Controller busca dados no Model.
View renderiza a lista de produtos.
Vantagens:
Separação clara de responsabilidades
Fácil manutenção e testes
ASP.NET Core: A Revolução Cross-Platform
O ASP.NET Core é a evolução do ASP.NET clássico, com:
Performance superior (até 10x mais rápido)
Roda em Linux, macOS e Windows
Integração nativa com Docker
Principais recursos:
Middlewares (pipelines de processamento)
Injeção de Dependência (DI) nativa
SignalR (para aplicações em tempo real)
Dica:
"Se a prova mencionar .NET Core, lembre: é a versão moderna e multiplataforma."
LINQ: Consultas Elegantes em C#
O LINQ (Language Integrated Query) permite fazer consultas diretamente no C#, sem depender de SQL puro.
Exemplo:
var produtosBaratos = db.Produtos
.Where(p => p.Preco < 100)
.OrderBy(p => p.Nome)
.ToList();
Vantagens:
Código mais legível
Compilação segura (erros são pegos antes de rodar)
Tipos de LINQ:
LINQ to Objects (listas em memória)
LINQ to SQL (banco de dados)
LINQ to XML (arquivos XML)
Docker e Kubernetes: .NET na Nuvem
Docker: Empacotando Aplicações .NET
O que é? Containers isolados que rodam em qualquer lugar.
Benefícios:
"Funciona na minha máquina" vira "funciona em qualquer lugar"
Deploy consistente (sem surpresas entre ambientes)
Kubernetes: Orquestrando Containers
Para que serve?
Escala automaticamente (mais containers se a demanda aumentar)
Gerencia falhas (reinicia containers que quebram)
Exemplo de uso:
Você desenvolve uma API em .NET.
Empacota no Docker.
Implanta no Kubernetes para escalar sob demanda.
Resumo dos Principais Conceitos
Tópico | O Que É? | Por Que Importa? |
---|---|---|
.NET 5+ | Plataforma unificada | Substitui o .NET Framework |
C# | Linguagem principal | Sintaxe moderna e poderosa |
Entity Framework | ORM para bancos de dados | Evita SQL manual |
ASP.NET MVC | Padrão para aplicações web | Separação clara de código |
ASP.NET Core | Versão moderna do ASP.NET | Roda em Linux e é mais rápido |
LINQ | Consultas integradas ao C# | Código mais limpo e seguro |
Docker | Containers para aplicações | Deploy consistente |
Kubernetes | Orquestrador de containers | Escalabilidade automática |
Conclusão: Como Estudar para Prova?
Domine C# (sintaxe, POO, async/await)
Pratique Entity Framework (CRUD, migrações)
Entenda ASP.NET Core (middlewares, DI)
Explore Docker (containers, imagens)
Revise Kubernetes (pods, deployments)
Dica Final:
"Não decore, entenda. .NET é sobre boas práticas e arquitetura limpa."
.net é uma linguem de programação? Não, .NET NÃO é uma linguagem de programação.
Não, .NET NÃO é uma linguagem de programação.
Explicação clara (em 3 pontos):
O que é .NET?
É uma plataforma de desenvolvimento (framework) criada pela Microsoft para construir aplicações.
Qual a linguagem principal do .NET?
C# (a mais usada), mas também suporta F# e VB.NET.
Analogia para memorizar:
Pense no .NET como um "motor" e no C# como o "combustível" que faz ele funcionar.
O que é .NET?
É uma plataforma de desenvolvimento (framework) criada pela Microsoft para construir aplicações.
Qual a linguagem principal do .NET?
C# (a mais usada), mas também suporta F# e VB.NET.
Analogia para memorizar:
Pense no .NET como um "motor" e no C# como o "combustível" que faz ele funcionar.
Confusão comum em provas:
.NET Framework vs .NET Core vs .NET 5+: Todos são versões da plataforma, não linguagens.
C# ≠ .NET: C# é a linguagem; .NET é o ambiente onde ela roda.
Exemplo de questão (sem resposta):
"Sobre .NET, é correto afirmar que:"
a) É uma linguagem de programação.
b) É uma plataforma que executa código em C#.
c) É um banco de dados.
(Dica: A resposta certa é a B!)
Precisa de mais detalhes? É só perguntar!
Quais os equivalentes de .net em outras linguagens? A plataforma .NET tem equivalentes em outras linguagens/ecossistemas, cada um com suas particularidades. Aqui está uma comparação direta:
.NET Framework vs .NET Core vs .NET 5+: Todos são versões da plataforma, não linguagens.
C# ≠ .NET: C# é a linguagem; .NET é o ambiente onde ela roda.
Exemplo de questão (sem resposta):
"Sobre .NET, é correto afirmar que:"
a) É uma linguagem de programação.
b) É uma plataforma que executa código em C#.
c) É um banco de dados.
(Dica: A resposta certa é a B!)
Precisa de mais detalhes? É só perguntar!
Equivalentes do .NET em Outras Linguagens
Java (Ecossistema JVM)
Plataforma: Java Virtual Machine (JVM)
Similar ao .NET Runtime (executa bytecode).
Frameworks:
Spring Boot ≈ ASP.NET Core (para APIs/web).
Hibernate ≈ Entity Framework (ORM).
Jakarta EE ≈ .NET Framework (enterprise).
Plataforma: Java Virtual Machine (JVM)
Similar ao .NET Runtime (executa bytecode).
Frameworks:
Spring Boot ≈ ASP.NET Core (para APIs/web).
Hibernate ≈ Entity Framework (ORM).
Jakarta EE ≈ .NET Framework (enterprise).
Python
Plataforma: Interpretador Python (CPython, PyPy).
Frameworks:
Django/Flask ≈ ASP.NET Core (web).
SQLAlchemy ≈ Entity Framework (ORM).
Plataforma: Interpretador Python (CPython, PyPy).
Frameworks:
Django/Flask ≈ ASP.NET Core (web).
SQLAlchemy ≈ Entity Framework (ORM).
JavaScript/Node.js
Plataforma: Node.js (runtime JavaScript).
Frameworks:
Express.js ≈ ASP.NET Core (APIs/web).
TypeORM ≈ Entity Framework (ORM).
Plataforma: Node.js (runtime JavaScript).
Frameworks:
Express.js ≈ ASP.NET Core (APIs/web).
TypeORM ≈ Entity Framework (ORM).
Go (Golang)
Plataforma: Compilador nativo (não precisa de runtime).
Frameworks:
Gin ≈ ASP.NET Core (APIs rápidas).
Plataforma: Compilador nativo (não precisa de runtime).
Frameworks:
Gin ≈ ASP.NET Core (APIs rápidas).
Ruby
Plataforma: Ruby MRI (interpretador).
Frameworks:
Ruby on Rails ≈ ASP.NET MVC (web full-stack).
Plataforma: Ruby MRI (interpretador).
Frameworks:
Ruby on Rails ≈ ASP.NET MVC (web full-stack).
PHP
Plataforma: Interpretador PHP (Zend Engine).
Frameworks:
Laravel ≈ ASP.NET Core (web).
Eloquent ≈ Entity Framework (ORM).
Plataforma: Interpretador PHP (Zend Engine).
Frameworks:
Laravel ≈ ASP.NET Core (web).
Eloquent ≈ Entity Framework (ORM).
Comparação Rápida
Recurso .NET Java (JVM) Node.js Python Runtime CLR JVM Node.js (V8) Interpretador ORM Entity Framework Hibernate TypeORM SQLAlchemy Web Framework ASP.NET Core Spring Boot Express.js Django/Flask Mobile Xamarin/MAUI Android SDK React Native Kivy (raro)
Recurso | .NET | Java (JVM) | Node.js | Python |
---|---|---|---|---|
Runtime | CLR | JVM | Node.js (V8) | Interpretador |
ORM | Entity Framework | Hibernate | TypeORM | SQLAlchemy |
Web Framework | ASP.NET Core | Spring Boot | Express.js | Django/Flask |
Mobile | Xamarin/MAUI | Android SDK | React Native | Kivy (raro) |
Quando Usar .NET vs Outros?
.NET: Melhor para integração com Windows, performance e C#.
Java/JVM: Melhor para aplicações enterprise (bancos, grandes sistemas).
Node.js: Melhor para APIs leves e tempo real (WebSockets).
Python: Melhor para IA/Data Science e prototipagem rápida.
Precisa de mais detalhes sobre algum ecossistema?
.NET: Melhor para integração com Windows, performance e C#.
Java/JVM: Melhor para aplicações enterprise (bancos, grandes sistemas).
Node.js: Melhor para APIs leves e tempo real (WebSockets).
Python: Melhor para IA/Data Science e prototipagem rápida.
Precisa de mais detalhes sobre algum ecossistema?
.NET é um framework?
Sim, .NET é um framework (mais precisamente, um ecossistema de desenvolvimento), mas com nuances importantes.
Sim, .NET é um framework (mais precisamente, um ecossistema de desenvolvimento), mas com nuances importantes.
Explicação Detalhada:
O que é um framework?
Um framework é uma estrutura pronta que fornece:
Bibliotecas de código.
Ferramentas para desenvolvimento.
Um ambiente de execução (como o CLR no .NET).
Um framework é uma estrutura pronta que fornece:
Bibliotecas de código.
Ferramentas para desenvolvimento.
Um ambiente de execução (como o CLR no .NET).
.NET se encaixa nisso?
✔ Sim, pois oferece:
Bibliotecas padrão (para IO, redes, threads).
Ferramentas (compilador, gerenciador de pacotes NuGet).
Runtime (CLR - Common Language Runtime).
✔ Sim, pois oferece:
Bibliotecas padrão (para IO, redes, threads).
Ferramentas (compilador, gerenciador de pacotes NuGet).
Runtime (CLR - Common Language Runtime).
Mas... é mais que um framework tradicional!
O .NET também inclui:
Linguagens (C#, F#, VB.NET).
Sub-frameworks (ex: ASP.NET Core para web, MAUI para mobile).
Suporte multiplataforma (Linux, macOS, Windows).
Por isso, tecnicamente é chamado de plataforma (um ecossistema completo).
O .NET também inclui:
Linguagens (C#, F#, VB.NET).
Sub-frameworks (ex: ASP.NET Core para web, MAUI para mobile).
Suporte multiplataforma (Linux, macOS, Windows).
Por isso, tecnicamente é chamado de plataforma (um ecossistema completo).
Analogia para Entender:
Pense no .NET como um "kit de construção de aplicativos" que inclui:
Ferramentas (martelo, serrote = compilador, bibliotecas).
Materiais (tijolos, cimento = linguagens como C#).
Manual de instruções (regras de execução = CLR).
Outros frameworks (como Spring para Java) são apenas parte desse kit.
Pense no .NET como um "kit de construção de aplicativos" que inclui:
Ferramentas (martelo, serrote = compilador, bibliotecas).
Materiais (tijolos, cimento = linguagens como C#).
Manual de instruções (regras de execução = CLR).
Outros frameworks (como Spring para Java) são apenas parte desse kit.
Resumo Final:
Termo Definição .NET se encaixa? Framework Estrutura com bibliotecas e ferramentas Sim (principalmente) Plataforma Ecossistema completo (linguagens + ferramentas + runtime) Sim (mais abrangente) Linguagem Sintaxe para escrever código (ex: C#) Não (C# é a linguagem)
Termo | Definição | .NET se encaixa? |
---|---|---|
Framework | Estrutura com bibliotecas e ferramentas | Sim (principalmente) |
Plataforma | Ecossistema completo (linguagens + ferramentas + runtime) | Sim (mais abrangente) |
Linguagem | Sintaxe para escrever código (ex: C#) | Não (C# é a linguagem) |
Exemplo Prático:
Você usa o .NET quando:
Cria uma API com ASP.NET Core (framework dentro do .NET).
Desenvolve um app com C# + Entity Framework (linguagem + ORM do ecossistema).
Conclusão:
".NET é primariamente um framework, mas vai além, funcionando como uma plataforma unificada. Por isso, ambos os termos são usados, dependendo do contexto."
Esclareceu? Se ainda tiver dúvidas, pode perguntar!
Node.js NÃO é um framework — é um runtime (ambiente de execução) para JavaScript. Vamos esclarecer de vez a diferença com exemplos práticos:
Você usa o .NET quando:
Cria uma API com ASP.NET Core (framework dentro do .NET).
Desenvolve um app com C# + Entity Framework (linguagem + ORM do ecossistema).
Conclusão:
".NET é primariamente um framework, mas vai além, funcionando como uma plataforma unificada. Por isso, ambos os termos são usados, dependendo do contexto."
Esclareceu? Se ainda tiver dúvidas, pode perguntar!
Node.js: Runtime (não framework)
O que faz?
Permite executar JavaScript fora do navegador (no servidor, desktop, etc.).
Comparação:
.NET CLR → Executa C#.
Node.js → Executa JavaScript.
Framework no Node.js?
Você usa frameworks (como Express.js) dentro do Node.js para criar aplicações.
O que faz?
Permite executar JavaScript fora do navegador (no servidor, desktop, etc.).Comparação:
.NET CLR → Executa C#.
Node.js → Executa JavaScript.
Framework no Node.js?
Você usa frameworks (como Express.js) dentro do Node.js para criar aplicações.
Comparação Direta
Termo Node.js .NET Tipo Runtime (executa JS) Plataforma (inclui runtime + frameworks) Framework Express.js, NestJS ASP.NET Core, MAUI Linguagem JavaScript/TypeScript C#, F#
Termo | Node.js | .NET |
---|---|---|
Tipo | Runtime (executa JS) | Plataforma (inclui runtime + frameworks) |
Framework | Express.js, NestJS | ASP.NET Core, MAUI |
Linguagem | JavaScript/TypeScript | C#, F# |
Analogia para Memorizar
Node.js é como um motor de carro (permite que o carro funcione).
Express.js (framework) é como o volante e os pedais (ferramentas para dirigir).
Node.js é como um motor de carro (permite que o carro funcione).
Express.js (framework) é como o volante e os pedais (ferramentas para dirigir).
Exemplo Prático
javascript// Código Node.js (usando framework Express.js)
const express = require('express');
const app = express(); // <- Express é o framework!
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000); // <- Node.js roda o servidor
// Código Node.js (usando framework Express.js) const express = require('express'); const app = express(); // <- Express é o framework! app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(3000); // <- Node.js roda o servidor
Resumo Final
Node.js ≠ Framework: É a base que executa JavaScript no servidor.
Frameworks no Node.js:
Express.js (simples).
NestJS (avançado, similar ao ASP.NET Core).
Se precisar de exemplos de código ou mais comparações, é só pedir!
Explicação direta e definitiva para você nunca mais confundir:
Node.js ≠ Framework: É a base que executa JavaScript no servidor.
Frameworks no Node.js:
Express.js (simples).
NestJS (avançado, similar ao ASP.NET Core).
Se precisar de exemplos de código ou mais comparações, é só pedir!
🔍 Por que .NET é considerado framework e Node.js não?
.NET é um "super-framework" (plataforma completa)
Oferece TUDO pronto em um pacote só:
Linguagens (C#, F#)
Bibliotecas padrão (para arquivos, redes, etc.)
Frameworks especializados (ASP.NET para web, MAUI para mobile)
Ambiente de execução (CLR)
Exemplo: É como comprar um kit Lego completo com peças e manual juntos
Node.js é um runtime (motor básico)
É APENAS um executador de JavaScript fora do navegador
NÃO vem com:
Linguagem (usa JavaScript/TypeScript que já existiam)
Bibliotecas completas (você instala separadamente)
Frameworks prontos (Express, NestJS são adicionais)
Exemplo: É como receber apenas o motor de um carro - você precisa montar o resto
.NET é um "super-framework" (plataforma completa)
Oferece TUDO pronto em um pacote só:
Linguagens (C#, F#)
Bibliotecas padrão (para arquivos, redes, etc.)
Frameworks especializados (ASP.NET para web, MAUI para mobile)
Ambiente de execução (CLR)
Exemplo: É como comprar um kit Lego completo com peças e manual juntos
Node.js é um runtime (motor básico)
É APENAS um executador de JavaScript fora do navegador
NÃO vem com:
Linguagem (usa JavaScript/TypeScript que já existiam)
Bibliotecas completas (você instala separadamente)
Frameworks prontos (Express, NestJS são adicionais)
Exemplo: É como receber apenas o motor de um carro - você precisa montar o resto
Comparação Técnica
.NET Node.js Tipo Plataforma/Framework Runtime Pré-requisitos Nenhum (tudo incluso) Precisa instalar frameworks depois Analogia Kit completo de maquete Motor solto para você montar
.NET | Node.js | |
---|---|---|
Tipo | Plataforma/Framework | Runtime |
Pré-requisitos | Nenhum (tudo incluso) | Precisa instalar frameworks depois |
Analogia | Kit completo de maquete | Motor solto para você montar |
Por que a confusão acontece?
Ambos permitem criar aplicações
Ambos têm ecossistemas grandes
A diferença está no nível de completude:
.NET = Tudo em um (Microsoft controla tudo)
Node.js = "Faça você mesmo" (comunidade adiciona peças)
Ambos permitem criar aplicações
Ambos têm ecossistemas grandes
A diferença está no nível de completude:
.NET = Tudo em um (Microsoft controla tudo)
Node.js = "Faça você mesmo" (comunidade adiciona peças)
Exemplo Prático
csharp// .NET - Já tem TUDO incluso
var app = WebApplication.Create(); // Framework WEB já embutido
app.MapGet("/", () => "Hello World!");
app.Run();
javascript// Node.js - Precisa adicionar TUDO
const express = require('express'); // Framework INSTALADO SEPARADAMENTE
const app = express();
app.get('/', (req, res) => res.send('Hello World!'));
app.listen(3000);
Conclusão:
.NET é como um smartphone (tudo integrado), Node.js é como um PC gamer (você monta as peças). Ambos são úteis, mas a abordagem é diferente!
// .NET - Já tem TUDO incluso var app = WebApplication.Create(); // Framework WEB já embutido app.MapGet("/", () => "Hello World!"); app.Run();
// Node.js - Precisa adicionar TUDO const express = require('express'); // Framework INSTALADO SEPARADAMENTE const app = express(); app.get('/', (req, res) => res.send('Hello World!')); app.listen(3000);
Conclusão:
.NET é como um smartphone (tudo integrado), Node.js é como um PC gamer (você monta as peças). Ambos são úteis, mas a abordagem é diferente!
Questionário sobre .NET (Respostas Simples)
1. O que é .NET?
R: Plataforma de desenvolvimento da Microsoft para criar aplicações web, desktop, mobile e APIs.
2. Qual a diferença entre .NET Framework e .NET Core?
R: .NET Framework só roda no Windows; .NET Core é cross-platform (Linux, macOS).
3. Qual a linguagem principal do .NET?
R: C#.
4. O que é Entity Framework?
R: ORM que mapeia bancos de dados para objetos em C#, evitando SQL manual.
5. Cite uma vantagem do ASP.NET MVC.
R: Separação clara entre Model (dados), View (interface) e Controller (lógica).
6. Por que o ASP.NET Core é melhor que o ASP.NET clássico?
R: É mais rápido, cross-platform e integra com Docker.
7. Para que serve o LINQ?
R: Fazer consultas (como SQL) diretamente em C#.
8. O que Docker faz por aplicações .NET?
R: Empacota a aplicação em containers para rodar em qualquer SO.
9. Qual a função do Kubernetes?
R: Orquestrar containers (escalar, gerenciar falhas).
10. Qual padrão de projeto o ASP.NET MVC segue?
R: MVC (Model-View-Controller).
Mapa Mental em Texto: Ecossistema .NET
┌───────────────────────────────────────────────────────┐
│ .NET │
└───────────────┬───────────────────┬───────────────────┘
│ │
┌──────────▼──────┐ ┌────────▼─────────┐
│ Linguagens │ │ Frameworks │
│ ┌─────┐ ┌────┐ │ │ ┌─────┐ ┌─────┐ │
│ │ C# │ │ F# │ │ │ │ EF │ │ MVC │ │
│ └─────┘ └────┘ │ │ └─────┘ └─────┘ │
└─────────────────┘ └────────┬─────────┘
│
┌────────────────▼────────────────┐
│ ASP.NET Core │
│ ┌───────────┐ ┌─────────────┐ │
│ │ Middleware│ │ SignalR │ │
│ └───────────┘ └─────────────┘ │
└────────────────┬────────────────┘
│
┌───────────────▼────────────────┐
│ Cloud/DevOps │
│ ┌─────────┐ ┌──────────────┐ │
│ │ Docker │ │ Kubernetes │ │
│ └─────────┘ └──────────────┘ │
└────────────────────────────────┘
Tópicos Principais:
Linguagens
C# (principal)
F# (funcional)
Frameworks
Entity Framework (ORM)
ASP.NET MVC (padrão web)
ASP.NET Core
Middlewares
SignalR (tempo real)
Cloud/DevOps
Docker (containers)
Kubernetes (orquestração)
Questões da prova da PROCERGS de 2023 sobre .NET
Se você está se preparando para um concurso com foco em .NET, este guia é o seu mapa para entender os principais conceitos cobrados nas questões 35 a 44 e 57 a 58. Vamos descomplicar os tópicos, destacar as respostas certas e tornar tudo mais fácil de memorizar.
1. O Que é .NET?
O .NET é um framework desenvolvido pela Microsoft para criar aplicações modernas, incluindo:
Web (ASP.NET, ASP.NET Core)
Desktop (Windows Forms, WPF)
Mobile (Xamarin, MAUI)
APIs (REST, gRPC)
Cloud (Azure, Docker, Kubernetes)
Diferença Entre .NET Framework, .NET Core e .NET 5+
Versão | Características |
---|---|
.NET Framework | Antigo, só roda no Windows |
.NET Core | Cross-platform (Windows, Linux, macOS) |
.NET 5+ | Evolução do Core, unificado (substitui o Framework) |
Questão 35:
Alternativa correta: B (A linguagem .NET é uma linguagem de programação, enquanto o framework .NET é uma plataforma de desenvolvimento).
2. Principais Tecnologias .NET
A) Entity Framework Core (ORM)
O que faz? Mapeia objetos do código para tabelas no banco de dados (evita SQL manual).
Vantagens:
Menos código repetitivo.
Suporte a vários bancos (SQL Server, PostgreSQL, MySQL).
Questão 36:
Alternativa correta: C (Possibilidade de gerenciar banco de dados sem SQL).
B) ASP.NET MVC
Padrão MVC:
Model (Dados) → Lógica de negócios.
View (Interface) → HTML, CSS.
Controller (Intermediário) → Processa requisições.
Questão 40:
Alternativa correta: C (Separação em Model, View, Controller).
C) ASP.NET Core
Melhorias em relação ao ASP.NET clássico:
Mais rápido e leve.
Cross-platform (roda no Linux).
Integração com Docker e Kubernetes.
Questão 43:
Alternativa correta: D (Framework web de código aberto para aplicações modernas).
D) LINQ (Language Integrated Query)
O que faz? Permite consultar dados (SQL-like) diretamente no C#.
Exemplo:
csharpvar produtosBaratos = produtos.Where(p => p.Preco < 100).ToList();
Questão 42:
Alternativa correta: C (Consulta em memória sobre objetos).
E) REST API em .NET
O que é? Arquitetura para criar APIs web (HTTP + JSON).
Vantagens:
Escalável (suporta milhões de requisições).
Flexível (integra com front-end, mobile, outros serviços).
Questão 39:
Alternativa correta: E (Arquitetura flexível e escalável).
3. Docker e Kubernetes com .NET
A) Docker
O que faz? Empacota aplicações em containers (isolados e portáteis).
Vantagens para .NET:
Rodar a mesma aplicação em qualquer SO.
Facilidade em deploy na nuvem.
Questão 57:
Alternativa correta: B (Facilitar o gerenciamento de containers no Kubernetes).
B) Kubernetes (K8s)
O que faz? Orquestra containers (escala automaticamente, gerencia falhas).
Vantagens para .NET:
Auto-scaling (aumenta/diminui instâncias conforme demanda).
Zero downtime (atualizações sem derrubar o sistema).
Questão 58:
Alternativa correta: C (Escalabilidade automática).
Estrutura Hierárquica (Direto ao Ponto)
┌───────────────────────────────────────────────────────────────┐
│ .NET (ECOSSISTEMA) │
└───────────────┬───────────────────────┬───────────────────────┘
│ │
┌───────────▼───────┐ ┌─────────▼─────────────────┐
│ LINGUAGENS │ │ FRAMEWORKS │
│ • C# (Principal) │ │ • Entity Framework (ORM) │
│ • F# (Funcional) │ │ • ASP.NET MVC (Web) │
└───────────┬───────┘ └─────────┬─────────────────┘
│ │
┌───────────▼───────────────────────▼───────────┐
│ ASP.NET CORE (MODERNO) │
│ • Cross-platform (Linux, Windows, macOS) │
│ • Middlewares (Pipeline de requisições) │
│ • SignalR (Comunicação em tempo real) │
└───────────────────────┬───────────────────────┘
│
┌───────────────────────▼───────────────────────┐
│ CLOUD & DEVOPS (ESCALABILIDADE) │
│ • Docker (Empacotamento em Containers) │
│ • Kubernetes (Orquestração de Containers) │
└───────────────────────────────────────────────┘


Como escrever o e comercial & em html?
Quando precisar escrever as notações html de espaço, acentos, ou outros caracteres especiais o navegador pode entender como uma tag e não interpretar por isso se usa o "&" para escrever "&".


O que é UML?
UML (Unified Modeling Language) significa linguagem de modelagem unificada.
Essa linguagem se baseia em um conjunto de diagramas, que são usados para descrever todas as fazes do projeto. Nele é descrito tudo que o cliente solicitou e que os desenvolvedores precisam fazer para alcançar aquele objetivo. Ou seja faz uma mapeamento de tudo que será usado no projeto.
Ela é uma linguagem que usa notação, com formas de escrever, comunicar e ilustrar tudo que foi solicitado em um projeto de sistema. Para isso são usados quadros, desenhos, formas geométricas, linhas para ligações e textos. Tudo isso seguindo um padrão de estrutura em cada diagrama.
Os diagramas são composto por elementos relacionados, eles mostram as fazes que o projeto terá que passar, os passos no sistema que serão desenvolvidos, quais as funcionalidades do software, como serão as integrações entre os papeis que podem ser pessoas, outros sistemas ou máquinas, quais os requisitos e processos necessários para se alcançar o objetivo.
Os diagramas da UML se dividem em dois grandes grupos: diagramas estruturais e diagramas comportamentais. Com 7 diagramas cada, 14 no total.
Para que serve UML?
Quais os diagramas estruturais da UML?
Quais os diagramas comportamentais da UML?


O que eu preciso saber sobre Docker para concurso público?
Guia Completo de Docker para Iniciantes
Docker é uma ferramenta que facilita a criação, implantação e execução de aplicativos em contêineres. Mas o que são contêineres? Vamos explorar esse mundo de maneira bem simples e detalhada para que você, que está começando agora, possa entender tudo.
1. Introdução ao Docker
O que é Docker? Docker é uma plataforma que usa contêineres para rodar aplicativos de maneira isolada. Pense em um contêiner como uma pequena caixinha que contém tudo o que o seu aplicativo precisa para rodar: código, bibliotecas, dependências, etc.
Por que usar Docker?
- Portabilidade: Contêineres podem rodar em qualquer lugar – no seu computador, em servidores ou na nuvem.
- Consistência: O aplicativo vai funcionar da mesma forma em qualquer ambiente.
- Eficiência: Contêineres são leves e rápidos para iniciar.
2. Imagens e Contêineres
O que são imagens Docker? Imagens são como moldes. Elas contêm tudo que o contêiner precisa para rodar: sistema operacional, aplicativo, bibliotecas, etc. Você pode baixar imagens prontas ou criar suas próprias.
O que são contêineres? Contêineres são instâncias de imagens. Pense neles como cópias de trabalho de uma imagem. Você pode criar vários contêineres a partir de uma única imagem.
Comandos básicos:
docker pull <imagem>
: Baixa uma imagem.docker run <imagem>
: Cria e inicia um contêiner a partir de uma imagem.docker ps
: Lista todos os contêineres em execução.docker stop <id_do_contêiner>
: Para um contêiner em execução.
3. Gerenciamento de Contêineres
Como gerenciar contêineres? Você pode iniciar, parar, pausar e excluir contêineres usando comandos Docker.
Comandos importantes:
docker start <id_do_contêiner>
: Inicia um contêiner parado.docker restart <id_do_contêiner>
: Reinicia um contêiner.docker rm <id_do_contêiner>
: Remove um contêiner.docker exec -it <id_do_contêiner> <comando>
: Executa um comando dentro de um contêiner em execução.
4. Redes e Volumes
Redes: Docker permite que você conecte contêineres em redes personalizadas, facilitando a comunicação entre eles.
docker network create <nome_da_rede>
: Cria uma rede.docker network ls
: Lista redes existentes.docker network connect <nome_da_rede> <id_do_contêiner>
: Conecta um contêiner a uma rede.
Volumes: Volumes são usados para armazenar dados fora do contêiner, garantindo que os dados não sejam perdidos quando o contêiner é removido.
docker volume create <nome_do_volume>
: Cria um volume.docker volume ls
: Lista volumes existentes.docker run -v <nome_do_volume>:/caminho_no_contêiner <imagem>
: Monta um volume em um contêiner.
5. Dockerfile e Docker Compose
Dockerfile: Um Dockerfile é um script que contém uma série de instruções para criar uma imagem Docker.
Exemplo de Dockerfile:
dockerfileFROM ubuntu:latestRUN apt-get update && apt-get install -y python3 COPY . /app WORKDIR /app CMD ["python3", "app.py"]
Docker Compose:
Docker Compose é uma ferramenta para definir e rodar aplicativos multi-contêiner. Use um arquivo docker-compose.yml
para configurar seus serviços.
Exemplo de docker-compose.yml:
yamlversion: '3'services:
web:
image: my-web-app
ports:
- "5000:5000"
redis:
image: redis
Comandos básicos do Docker Compose:
docker-compose up
: Inicia todos os serviços definidos no arquivo.docker-compose down
: Para todos os serviços e remove contêineres, redes e volumes criados pelo Docker Compose.
6. Orquestração de Contêineres
Para gerenciar contêineres em grande escala, usamos ferramentas de orquestração como Kubernetes. Elas ajudam a distribuir, gerenciar e escalar contêineres automaticamente.
7. Segurança e Boas Práticas
Segurança:
- Use imagens oficiais: Baixe imagens de fontes confiáveis.
- Atualize regularmente: Mantenha o Docker e suas imagens sempre atualizadas.
- Restringir permissões: Execute contêineres com o mínimo de permissões necessárias.
Boas práticas:
- Imagem pequena: Use imagens mínimas para reduzir vulnerabilidades e tempo de carregamento.
- Camadas cacheáveis: Estruture seu Dockerfile para aproveitar o cache.
- Limpeza: Remova arquivos temporários e dependências desnecessárias ao criar suas imagens.
8. Monitoramento e Logging
Monitoramento: Ferramentas como Prometheus e Grafana são usadas para monitorar contêineres Docker, fornecendo métricas de desempenho e alertas.
Logging: Docker pode integrar-se com sistemas de logging como ELK (Elasticsearch, Logstash, Kibana) para coletar e visualizar logs de contêineres.
docker logs <id_do_contêiner>
: Exibe logs de um contêiner.
9. Integração Contínua e Implantação Contínua (CI/CD)
Docker é excelente para CI/CD, permitindo criar pipelines que constroem, testam e implantam contêineres automaticamente.
Ferramentas populares:
- Jenkins: Integração contínua.
- GitLab CI/CD: Solução completa de CI/CD.
- Travis CI: Integração contínua para repositórios GitHub.
Exemplo de pipeline CI/CD com Docker:
- Build: Cria a imagem Docker.
- Test: Executa testes dentro do contêiner.
- Deploy: Implanta a imagem no ambiente de produção.
ConclusãoJá sabe tudo sobre Docker?
Docker é uma ferramenta poderosa que transforma a maneira como desenvolvemos, implantamos e gerenciamos aplicativos. Compreender seus conceitos básicos e avançados, como contêineres, imagens, redes, volumes, Dockerfile, Docker Compose e práticas de CI/CD, é fundamental para tirar o máximo proveito desta tecnologia.
Com este guia, você está pronto para começar a usar Docker e explorar todo o seu potencial. Boa sorte e divirta-se com Docker!
Docker para Concursos Públicos
Entender Docker pode ser útil em vários concursos públicos, especialmente aqueles voltados para áreas de tecnologia da informação, administração de sistemas e desenvolvimento de software. Aqui estão os tópicos mais comuns sobre Docker que costumam cair em concursos públicos:
1. Conceitos Básicos de Docker
- O que é Docker: Definição, principais características e benefícios.
- História do Docker: Breve histórico e evolução da ferramenta.
- Contêineres vs. Máquinas Virtuais: Diferenças e vantagens de contêineres sobre VMs.
2. Imagens e Contêineres
- Imagens Docker: O que são, como são criadas e usadas.
- Comandos Básicos:
docker pull
,docker run
,docker ps
,docker stop
,docker rm
. - Contêineres: O que são, como criar, iniciar, parar e remover contêineres.
3. Gerenciamento de Contêineres
- Comandos de Gerenciamento:
docker start
,docker restart
,docker exec
,docker logs
. - Manipulação de Contêineres: Como inspecionar, listar e gerenciar contêineres.
4. Redes e Volumes
- Redes Docker: Tipos de redes (bridge, host, none), como criar e gerenciar redes (
docker network
). - Volumes Docker: O que são, como criar, listar e usar volumes (
docker volume
).
5. Dockerfile
- O que é Dockerfile: Definição e propósito.
- Instruções Comuns em Dockerfile:
FROM
,RUN
,COPY
,ADD
,CMD
,ENTRYPOINT
. - Construção de Imagens: Como criar uma imagem a partir de um Dockerfile (
docker build
).
6. Docker Compose
- O que é Docker Compose: Definição e finalidade.
- Arquivo docker-compose.yml: Estrutura básica e exemplos.
- Comandos Docker Compose:
docker-compose up
,docker-compose down
,docker-compose ps
.
7. Orquestração de Contêineres
- Orquestração: Conceito e importância.
- Ferramentas de Orquestração: Breve introdução ao Kubernetes, Docker Swarm.
8. Segurança em Docker
- Boas Práticas de Segurança: Usar imagens oficiais, atualizar regularmente, restringir permissões.
- Isolamento e Controle de Acesso: Como Docker implementa segurança entre contêineres.
9. Monitoramento e Logging
- Ferramentas de Monitoramento: Introdução a Prometheus, Grafana.
- Logging de Contêineres: Como acessar logs (
docker logs
), integração com ELK Stack.
10. Integração Contínua e Implantação Contínua (CI/CD)
- CI/CD com Docker: Benefícios de usar Docker em pipelines de CI/CD.
- Ferramentas de CI/CD: Uso de Jenkins, GitLab CI/CD, Travis CI com Docker.
Dicas para Estudo
- Praticar Comandos: Use Docker no seu próprio computador para praticar os comandos básicos.
- Criar e Usar Dockerfiles: Faça experimentos criando suas próprias imagens com Dockerfile.
- Estudar Docker Compose: Configure aplicativos simples usando Docker Compose.
- Ler Documentação Oficial: A documentação do Docker é uma excelente fonte de estudo.
- Fazer Simulados: Resolva questões de concursos anteriores que incluam Docker para se familiarizar com o formato das perguntas.
Com esses tópicos em mente, você estará bem preparado para responder perguntas sobre Docker em concursos públicos. Boa sorte nos seus estudos!
Questões básicas para concurso sobre Docker
1. Conceitos Básicos de Docker
1.1. Qual das alternativas abaixo melhor define o Docker?
A) Docker é uma plataforma de virtualização que utiliza hypervisores para rodar múltiplos sistemas operacionais simultaneamente.
B) Docker é uma plataforma que utiliza contêineres para criar, implantar e executar aplicativos em ambientes isolados.
C) Docker é uma ferramenta de gerenciamento de banco de dados distribuído.
D) Docker é um sistema operacional específico para servidores em nuvem.
E) Docker é uma linguagem de programação voltada para infraestrutura como código.
Resposta: B
2. Imagens e Contêineres
2.1. Qual comando é utilizado para listar todas as imagens Docker disponíveis localmente?
A) docker ps
B) docker images
C) docker run
D) docker pull
E) docker ls
Resposta: B
3. Gerenciamento de Contêineres
3.1. Para inspecionar um contêiner em execução e obter informações detalhadas sobre ele, qual comando deve ser utilizado?
A) docker inspect <id_do_contêiner>
B) docker info <id_do_contêiner>
C) docker details <id_do_contêiner>
D) docker examine <id_do_contêiner>
E) docker check <id_do_contêiner>
Resposta: A
4. Redes e Volumes
4.1. Qual tipo de rede Docker é ideal para criar uma rede isolada para contêineres que não deve se comunicar com a rede externa?
A) bridge
B) host
C) overlay
D) none
E) external
Resposta: D
5. Dockerfile
5.1. No contexto de um Dockerfile, qual instrução é usada para copiar arquivos ou diretórios do sistema de arquivos do host para o sistema de arquivos do contêiner?
A) RUN
B) COPY
C) ADD
D) CMD
E) ENTRYPOINT
Resposta: B
6. Docker Compose
6.1. Qual comando é usado para iniciar todos os serviços definidos em um arquivo docker-compose.yml
?
A) docker-compose build
B) docker-compose start
C) docker-compose run
D) docker-compose up
E) docker-compose deploy
Resposta: D
7. Orquestração de Contêineres
7.1. Qual ferramenta de orquestração é mais comumente utilizada em conjunto com Docker para gerenciar contêineres em larga escala, fornecendo recursos como escalonamento, balanceamento de carga e autorrecuperação?
A) Docker Swarm
B) Kubernetes
C) Mesos
D) OpenShift
E) Nomad
Resposta: B
8. Segurança em Docker
8.1. Qual das seguintes práticas é recomendada para aumentar a segurança ao utilizar Docker?
A) Executar todos os contêineres com privilégios elevados.
B) Utilizar imagens de fontes não verificadas para acelerar o desenvolvimento.
C) Executar contêineres como usuário root para evitar problemas de permissões.
D) Manter o Docker e as imagens sempre atualizadas com os últimos patches de segurança.
E) Desativar todas as verificações de segurança para maximizar o desempenho.
Resposta: D
9. Monitoramento e Logging
9.1. Qual ferramenta é amplamente utilizada para coletar métricas de desempenho e monitorar contêineres Docker, muitas vezes em conjunto com Grafana para visualização?
A) Nagios
B) Prometheus
C) Kibana
D) Splunk
E) Logstash
Resposta: B
10. Integração Contínua e Implantação Contínua (CI/CD)
10.1. Em um pipeline CI/CD, qual é o principal benefício de usar contêineres Docker?
A) Melhorar a segurança do código fonte.
B) Acelerar o processo de escrita de código.
C) Garantir que o código funcione de forma consistente em diferentes ambientes.
D) Reduzir o custo do hardware utilizado.
E) Eliminar a necessidade de testes automatizados.
Resposta: C
Questões Avançadas sobre Docker
1. Conceitos Básicos de Docker
1.1. Qual das alternativas melhor descreve como o Docker lida com a compatibilidade entre diferentes ambientes de execução de aplicativos?
A) Docker garante a compatibilidade ao usar hypervisores para isolar ambientes de execução.
B) Docker usa contêineres para encapsular aplicativos e suas dependências, garantindo que eles rodem de maneira consistente em diferentes ambientes.
C) Docker implementa um sistema de arquivos compartilhado entre o host e os contêineres para sincronizar dependências.
D) Docker utiliza scripts de configuração para adaptar automaticamente os aplicativos a diferentes ambientes de execução.
E) Docker depende de integrações com ferramentas de configuração de ambientes como Ansible e Chef para garantir compatibilidade.
Resposta Correta: B
Justificativa:
- A) Incorreta: Docker não usa hypervisores; ele utiliza contêineres que compartilham o kernel do sistema operacional do host.
- B) Correta: Docker encapsula aplicativos e suas dependências em contêineres, garantindo que rodem de maneira consistente em qualquer ambiente.
- C) Incorreta: Docker não depende de um sistema de arquivos compartilhado para sincronizar dependências; ele encapsula todas as dependências dentro dos contêineres.
- D) Incorreta: Docker não adapta automaticamente os aplicativos a diferentes ambientes de execução por meio de scripts de configuração.
- E) Incorreta: Embora Docker possa ser usado em conjunto com ferramentas como Ansible e Chef, ele não depende delas para garantir a compatibilidade entre ambientes.
2. Imagens e Contêineres
2.1. Ao criar uma imagem Docker, qual é a importância de minimizar o número de camadas, e como isso pode ser alcançado?
A) Minimizar o número de camadas reduz a segurança da imagem, tornando-a mais vulnerável a ataques.
B) Minimizar o número de camadas torna a imagem menos portátil entre diferentes sistemas operacionais.
C) Minimizar o número de camadas pode reduzir o tamanho da imagem e melhorar o desempenho ao construir e rodar contêineres, e isso pode ser alcançado combinando múltiplas instruções em uma única camada.
D) Minimizar o número de camadas aumenta a complexidade de manutenção da imagem devido à dificuldade em gerenciar dependências.
E) Minimizar o número de camadas é irrelevante, pois não afeta o desempenho ou o tamanho da imagem.
Resposta Correta: C
Justificativa:
- A) Incorreta: Minimizar o número de camadas não reduz a segurança da imagem.
- B) Incorreta: Minimizar o número de camadas não afeta a portabilidade da imagem.
- C) Correta: Minimizar o número de camadas pode reduzir o tamanho da imagem e melhorar o desempenho. Isso pode ser feito combinando múltiplas instruções
RUN
em uma única camada usando o&&
. - D) Incorreta: Minimizar o número de camadas não aumenta a complexidade de manutenção da imagem; pode até simplificar.
- E) Incorreta: Minimizar o número de camadas é relevante para o desempenho e o tamanho da imagem.
3. Gerenciamento de Contêineres
3.1. Qual das seguintes práticas é recomendada para gerenciar a escala de contêineres em um ambiente de produção usando Docker?
A) Usar scripts shell personalizados para iniciar e parar contêineres manualmente.
B) Utilizar a API do Docker para desenvolver uma solução de gerenciamento interna.
C) Implementar uma ferramenta de orquestração como Kubernetes ou Docker Swarm para gerenciar automaticamente a escala e a disponibilidade dos contêineres.
D) Conectar todos os contêineres diretamente à rede host para simplificar a comunicação.
E) Executar todos os contêineres como usuários root para evitar problemas de permissão.
Resposta Correta: C
Justificativa:
- A) Incorreta: Scripts shell personalizados são inadequados para ambientes de produção devido à falta de escalabilidade e automação.
- B) Incorreta: Desenvolver uma solução interna usando a API do Docker pode ser complexo e menos eficiente do que usar ferramentas de orquestração estabelecidas.
- C) Correta: Ferramentas de orquestração como Kubernetes ou Docker Swarm são projetadas para gerenciar automaticamente a escala, balanceamento de carga e alta disponibilidade de contêineres em ambientes de produção.
- D) Incorreta: Conectar contêineres diretamente à rede host pode causar problemas de segurança e gestão.
- E) Incorreta: Executar contêineres como root é uma prática de segurança ruim e deve ser evitada.
4. Redes e Volumes
4.1. Qual é o principal benefício de usar volumes Docker em vez de bind mounts para armazenar dados persistentes?
A) Volumes Docker são armazenados no sistema de arquivos do host, o que aumenta a performance.
B) Volumes Docker são gerenciados pelo Docker, o que simplifica o backup, migração e gerenciamento dos dados persistentes.
C) Volumes Docker permitem compartilhamento direto de dados entre contêineres sem a necessidade de configurações adicionais.
D) Volumes Docker são sempre armazenados em memória RAM, garantindo maior velocidade de acesso.
E) Volumes Docker automaticamente criptografam os dados armazenados, garantindo maior segurança.
Resposta Correta: B
Justificativa:
- A) Incorreta: Tanto volumes quanto bind mounts são armazenados no sistema de arquivos do host, mas volumes são otimizados para Docker.
- B) Correta: Volumes Docker são gerenciados pelo Docker, facilitando o backup, a migração e o gerenciamento dos dados.
- C) Incorreta: Volumes Docker facilitam o compartilhamento de dados, mas não sem configurações adicionais.
- D) Incorreta: Volumes Docker não são armazenados em RAM; são persistentes no disco.
- E) Incorreta: Volumes Docker não criptografam automaticamente os dados; a criptografia deve ser configurada separadamente.
5. Dockerfile
5.1. Em um Dockerfile, qual é a diferença entre as instruções CMD e ENTRYPOINT, e como elas afetam a execução de um contêiner?
A) CMD
e ENTRYPOINT
são intercambiáveis e podem ser usados de forma indistinta sem qualquer impacto na execução.
B) CMD
define o comando padrão a ser executado se nenhum outro comando for fornecido, enquanto ENTRYPOINT
define o comando que sempre será executado, permitindo passar argumentos adicionais.
C) CMD
define o comando que deve ser executado primeiro, seguido pelo ENTRYPOINT
.
D) ENTRYPOINT
é usado para definir variáveis de ambiente, enquanto CMD
é usado para definir comandos de execução.
E) CMD
é ignorado se ENTRYPOINT
estiver presente no Dockerfile.
Resposta Correta: B
Justificativa:
- A) Incorreta:
CMD
eENTRYPOINT
não são intercambiáveis; têm funções diferentes. - B) Correta:
CMD
define o comando padrão que pode ser substituído, enquantoENTRYPOINT
define o comando que será sempre executado, permitindo passar argumentos adicionais. - C) Incorreta:
CMD
não é executado primeiro; é o comando padrão se nenhum outro for fornecido. - D) Incorreta:
ENTRYPOINT
não é usado para definir variáveis de ambiente. - E) Incorreta:
CMD
não é completamente ignorado; pode fornecer argumentos padrão aoENTRYPOINT
.
6. Docker Compose
6.1. Em Docker Compose, como você definiria uma dependência de serviço para garantir que um contêiner de banco de dados esteja totalmente inicializado antes de um contêiner de aplicação web tentar se conectar a ele?
A) Utilizando a chave links
para conectar o serviço de aplicação ao serviço de banco de dados.
B) Usando a chave depends_on
para definir a ordem de inicialização dos serviços.
C) Configurando a chave networks
para colocar ambos os serviços na mesma rede.
D) Implementando a chave volumes_from
para compartilhar volumes entre os serviços.
E) Definindo a chave build
para garantir que o serviço de banco de dados seja construído primeiro.
Resposta Correta: B
Justificativa:
- A) Incorreta:
links
apenas estabelece conectividade de rede, não garante que o serviço esteja pronto. - B) Correta:
depends_on
define a ordem de inicialização dos serviços, mas não garante que o serviço de banco de dados esteja pronto, apenas que ele será iniciado antes. - C) Incorreta:
networks
coloca serviços na mesma rede, mas não define dependências de inicialização. - D) Incorreta:
volumes_from
compartilha volumes, mas não define dependências de serviço. - E) Incorreta:
build
especifica a construção da imagem, não a ordem de inicialização dos serviços.
7. Orquestração de Contêineres
7.1. Qual é a principal função de um controlador de replicação no Kubernetes?
A) Gerenciar a configuração de rede dos contêineres.
B) Implementar políticas de segurança entre os contêineres.
C) Garantir que um número especificado de réplicas de um pod esteja em execução a qualquer momento.
D) Monitorar o desempenho dos contêineres e ajustar os recursos automaticamente.
E) Facilitar a comunicação entre diferentes namespaces no cluster.
Resposta Correta: C
Justificativa:
- A) Incorreta: Controladores de replicação não gerenciam a configuração de rede diretamente.
- B) Incorreta: Políticas de segurança são gerenciadas por Network Policies e RBAC.
- C) Correta: Controladores de replicação garantem que um número especificado de réplicas de um pod esteja em execução.
- D) Incorreta: Ajuste automático de recursos é função do Horizontal Pod Autoscaler.
- E) Incorreta: Comunicação entre namespaces é gerenciada por outros componentes de rede.
8. Segurança em Docker
8.1. Qual das seguintes práticas melhora a segurança de contêineres Docker em um ambiente de produção?
A) Executar todos os contêineres como usuário root.
B) Utilizar imagens minimalistas e oficiais para reduzir a superfície de ataque.
C) Desativar todos os logs para evitar vazamento de informações sensíveis.
D) Manter os contêineres sempre em execução, independentemente de sua necessidade.
E) Compartilhar diretórios de sistema do host com os contêineres para facilitar o acesso.
Resposta Correta: B
Justificativa:
- A) Incorreta: Executar contêineres como root é uma má prática de segurança.
- B) Correta: Usar imagens minimalistas e oficiais reduz a superfície de ataque e minimiza vulnerabilidades.
- C) Incorreta: Desativar logs pode dificultar a identificação e resolução de problemas de segurança.
- D) Incorreta: Manter contêineres desnecessários em execução pode aumentar a superfície de ataque.
- E) Incorreta: Compartilhar diretórios de sistema do host pode introduzir riscos de segurança significativos.
9. Monitoramento e Logging
9.1. Qual é o principal benefício de integrar Docker com uma stack de monitoramento como ELK (Elasticsearch, Logstash, Kibana)?
A) Reduzir o consumo de recursos dos contêineres Docker.
B) Facilitar a escalabilidade automática dos contêineres.
C) Prover uma interface centralizada para coleta, processamento e visualização de logs de contêineres.
D) Aumentar a velocidade de rede entre contêineres.
E) Melhorar a compatibilidade entre diferentes versões de Docker.
Resposta Correta: C
Justificativa:
- A) Incorreta: ELK não reduz o consumo de recursos dos contêineres.
- B) Incorreta: ELK não facilita a escalabilidade automática de contêineres.
- C) Correta: ELK proporciona uma interface centralizada para coleta, processamento e visualização de logs.
- D) Incorreta: ELK não afeta a velocidade de rede entre contêineres.
- E) Incorreta: ELK não melhora a compatibilidade entre versões de Docker.
10. Integração Contínua e Implantação Contínua (CI/CD)
10.1. Em um pipeline de CI/CD, qual é a vantagem de usar contêineres Docker para executar testes automatizados?
A) Aumenta o tempo necessário para a execução dos testes.
B) Garante que os testes serão executados diretamente no ambiente de produção.
C) Permite que os testes sejam executados em um ambiente consistente, independente das configurações do sistema de desenvolvimento.
D) Necessita de menos recursos de hardware para executar os testes.
E) Elimina a necessidade de controle de versão para o código fonte.
Resposta Correta: C
Justificativa:
- A) Incorreta: Contêineres geralmente reduzem o tempo necessário para configurar e executar testes.
- B) Incorreta: Testes automatizados em contêineres não precisam ser executados diretamente no ambiente de produção.
- C) Correta: Contêineres garantem que os testes sejam executados em um ambiente consistente, independente do sistema de desenvolvimento.
- D) Incorreta: Embora contêineres possam ser eficientes, não necessariamente necessitam de menos recursos de hardware.
- E) Incorreta: Contêineres não eliminam a necessidade de controle de versão para o código fonte.
FAQ - Perguntas Frequentes sobre Docker
Para que é usado o Docker?
Resposta: Docker é usado para criar, implantar e gerenciar contêineres, que são ambientes isolados que contêm tudo o que um aplicativo precisa para ser executado: código, runtime, bibliotecas e dependências. Docker permite que os desenvolvedores empacotem um aplicativo com todas as suas partes necessárias, o que garante que ele funcione de maneira consistente em diferentes ambientes, desde o desenvolvimento até a produção.
Detalhamento:
- Portabilidade: Docker permite que os aplicativos sejam portáveis entre diferentes sistemas operacionais e ambientes.
- Consistência: Ao encapsular todas as dependências, Docker garante que o aplicativo funcione da mesma maneira em qualquer lugar.
- Eficiência: Contêineres são mais leves que máquinas virtuais, permitindo maior densidade de aplicativos em um mesmo host.
- Isolamento: Docker oferece isolamento de processos, o que aumenta a segurança e a gestão de recursos.
Qual a diferença entre Docker e Kubernetes?
Resposta: Docker é uma plataforma para desenvolver, enviar e executar aplicativos dentro de contêineres. Kubernetes é uma plataforma de orquestração de contêineres que automatiza a implantação, o escalonamento e o gerenciamento de aplicativos contêinerizados.
Detalhamento:
- Docker: Foca na criação e gerenciamento de contêineres individuais. Inclui ferramentas como Docker Engine, Docker Hub e Docker Compose.
- Kubernetes: Foca na orquestração de múltiplos contêineres distribuídos em clusters de máquinas. Garante que os aplicativos estejam sempre rodando, escalando conforme necessário, e gerenciando o ciclo de vida dos contêineres.
- Interação: Docker é frequentemente usado em conjunto com Kubernetes para fornecer o runtime dos contêineres, enquanto Kubernetes gerencia esses contêineres em larga escala.
Docker é uma ferramenta ou framework?
Resposta: Docker é uma ferramenta e uma plataforma. Ele fornece uma suite de ferramentas para criar, distribuir e executar contêineres. Docker inclui componentes como Docker Engine, Docker CLI (Interface de Linha de Comando), Docker Compose, Docker Hub e Docker Swarm.
Detalhamento:
- Ferramenta: Docker CLI é uma ferramenta de linha de comando para interagir com o Docker Engine.
- Plataforma: Docker é uma plataforma completa que oferece uma solução integrada para o desenvolvimento, entrega e execução de aplicativos contêinerizados.
- Componentes: Inclui diversos componentes que trabalham juntos para fornecer um ambiente completo de contêinerização.
Docker é uma máquina virtual?
Resposta: Não, Docker não é uma máquina virtual. Docker usa contêineres, que são mais leves e eficientes que máquinas virtuais. Contêineres compartilham o kernel do sistema operacional do host e isolam os aplicativos em espaços de usuário separados, enquanto máquinas virtuais incluem um sistema operacional completo e utilizam hypervisores para isolamento.
Detalhamento:
- Contêineres vs. VMs: Contêineres compartilham o kernel do SO e são mais leves, enquanto VMs incluem um SO completo e usam hypervisores.
- Performance: Contêineres têm menor overhead de performance e são mais rápidos para iniciar e parar em comparação com VMs.
- Isolamento: Contêineres oferecem isolamento a nível de processo e namespace, enquanto VMs oferecem isolamento a nível de hardware.
O que é o Docker e para que serve?
Resposta: Docker é uma plataforma open-source que facilita a criação, distribuição e execução de aplicativos em contêineres. Os contêineres encapsulam um aplicativo e todas as suas dependências, garantindo que ele funcione de maneira consistente em qualquer ambiente, seja desenvolvimento, teste ou produção.
Para que serve:
- Portabilidade: Permite mover aplicativos facilmente entre diferentes ambientes (desenvolvimento, teste, produção).
- Consistência: Garante que os aplicativos rodem da mesma maneira, independentemente do ambiente.
- Eficiência: Contêineres são mais leves que máquinas virtuais, permitindo maior densidade de aplicativos.
- Isolamento: Proporciona isolamento de processos, aumentando a segurança e facilitando a gestão de recursos.
- Automação: Facilita a integração contínua e a entrega contínua (CI/CD) automatizando o processo de construção, teste e implantação de aplicativos.
Por que não usar Docker?
Resposta: Embora Docker ofereça muitos benefícios, pode haver situações em que seu uso não seja ideal. Alguns motivos para não usar Docker incluem:
- Complexidade Adicional: Para pequenas aplicações ou projetos simples, Docker pode adicionar complexidade desnecessária.
- Overhead de Recursos: Apesar de ser mais leve que VMs, contêineres ainda consomem recursos adicionais. Em ambientes extremamente restritos em termos de recursos, isso pode ser uma desvantagem.
- Persistência de Dados: Gerenciar dados persistentes em contêineres pode ser mais complexo do que em VMs ou servidores tradicionais.
- Segurança: Embora Docker tenha medidas de segurança, a execução de contêineres com privilégios elevados (como root) pode apresentar riscos de segurança.
- Compatibilidade: Aplicativos legados ou muito dependentes do ambiente específico do host podem não ser facilmente contêinerizados.
- Learning Curve: Pode exigir um tempo significativo de aprendizado e adaptação para equipes que não estão familiarizadas com a tecnologia.
Qual a diferença entre contêiner e Docker?
Resposta: Contêiner e Docker são conceitos relacionados, mas distintos.
Contêiner:
- Definição: Um contêiner é uma unidade de software que empacota o código de um aplicativo e todas as suas dependências, permitindo que ele seja executado de maneira consistente em qualquer ambiente.
- Uso Geral: Contêineres isolam os aplicativos uns dos outros e do sistema host, proporcionando portabilidade e consistência.
Docker:
- Definição: Docker é uma plataforma e um conjunto de ferramentas que facilitam a criação, distribuição e execução de contêineres.
- Ferramentas e Componentes: Inclui Docker Engine (motor de contêiner), Docker Hub (repositório de imagens), Docker Compose (orquestração de múltiplos contêineres), entre outros.
- Ecossistema: Docker fornece um ecossistema completo para gerenciar o ciclo de vida dos contêineres, incluindo construção, distribuição, execução e orquestração.
Resumo:
- Contêiner: A unidade de execução encapsulada que pode ser criada e gerenciada por várias tecnologias, incluindo Docker.
- Docker: A plataforma que proporciona ferramentas e serviços para facilitar a criação, distribuição e gerenciamento de contêineres.
Essas respostas proporcionam uma compreensão clara do que é essa Docker, por que pode não ser adequado em certas situações, a diferença entre contêineres e a plataforma, cobrem as principais diferenças e usos da ferramenta, proporcionando uma compreensão clara e detalhada sobre como ele se posiciona em relação a outras tecnologias como Kubernetes e máquinas virtuais.


Quais os padrões de projetos cobrados nos concursos públicos de TI como o do CRF RS de 2024?
Desvendando os Segredos dos Padrões de Projeto: Guia Abrangente para Desenvolvedores Concurseiros
Você já se deparou com problemas recorrentes durante o desenvolvimento de software e desejou uma solução pronta e eficiente? Se sim, você não está sozinho! Os padrões de projeto são como ferramentas mágicas que podem simplificar sua vida como desenvolvedor, oferecendo soluções elegantes para problemas comuns de design. Neste guia abrangente, vamos explorar os diferentes tipos de padrões de projeto, desde os padrões de criação até os padrões GRASP, fornecendo exemplos claros e dicas práticas para facilitar sua compreensão.

O que são padrões de projetos?
Os padrões de projetos são soluções para problemas comuns que surgem durante o desenvolvimento de software. Eles representam as melhores práticas encapsuladas e refinadas ao longo do tempo por desenvolvedores experientes. Esses padrões fornecem soluções testadas e comprovadas para problemas recorrentes, permitindo que os desenvolvedores comuniquem ideias de projeto de maneira eficaz e construam sistemas de software mais robustos e flexíveis.
Padrões de Criação
Os padrões de criação são responsáveis por fornecer mecanismos para criar objetos de forma flexível e eficiente. Vamos dar uma olhada em alguns dos mais populares:
O Padrão Singleton: Unicidade Garantida
Imagine que você precise de uma única instância de uma classe em todo o seu programa. Este é a solução perfeita! Ele garante que apenas uma instância da classe seja criada e fornece um ponto de acesso global a essa instância.
O padrão Singleton é um dos padrões mais simples e amplamente utilizados. Ele garante que uma classe tenha apenas uma instância e fornece um ponto global de acesso a essa instância. Isso é útil em situações onde você precisa de exatamente uma instância de uma classe para coordenar ações em todo o sistema. Por exemplo, um logger em um sistema pode ser implementado como um Singleton para garantir que todas as partes do sistema registrem eventos no mesmo arquivo de log.
Está é uma ferramenta valiosa quando precisamos garantir que uma classe tenha apenas uma instância em todo o sistema. Ao utilizar o carregamento lento, podemos assegurar que a instância seja criada somente quando necessária, evitando assim múltiplas instâncias ativas que poderiam resultar em bugs inesperados. Por exemplo, em sistemas de registro de eventos, como os encontrados em frameworks de front-end como React ou Angular, o Singleton oferece uma solução elegante para lidar com logs de múltiplos componentes, garantindo a integridade dos registros.
Exemplo: Em um sistema de configuração, você pode usar o Singleton para garantir que todas as partes do sistema acessem as mesmas configurações.
2. Prototype
O padrão Prototype permite que você crie novos objetos a partir de objetos existentes, clonando-os. Isso é útil quando a criação de um novo objeto é mais eficiente através da clonagem de um objeto existente do que através da criação do objeto do zero.
Exemplo: Em um sistema de geração de relatórios, você pode usar o Prototype para clonar um modelo de relatório existente e personalizá-lo conforme necessário.
Padrões Estruturais
Os padrões estruturais se concentram em como classes e objetos são compostos para formar estruturas maiores. Aqui estão alguns exemplos:
1. Adapter
O Adapter é como um tradutor entre duas interfaces incompatíveis. Ele permite que objetos com interfaces diferentes trabalhem juntos.
Exemplo: Em um sistema que se comunica com diferentes serviços de pagamento, você pode usar o Adapter para adaptar a interface de cada serviço de pagamento para uma interface comum no sistema.
2. Facade
O Facade fornece uma interface unificada para um conjunto de interfaces em um subsistema. Ele simplifica a complexidade, fornecendo uma interface mais simples e fácil de usar.
Trata-se de um padrão de projeto estrutural que fornece uma interface simplificada para um conjunto mais complexo de classes. Ele atua como uma fachada para ocultar a complexidade interna de um sistema e fornecer uma interface mais fácil de usar. Por exemplo, em um sistema de reserva de passagens aéreas, uma fachada pode ser criada para lidar com todos os aspectos da reserva, como verificar disponibilidade, calcular preços e processar pagamentos, ocultando assim a complexidade dessas operações para o cliente.
Exemplo: Em um sistema de processamento de pedidos online, você pode usar o Facade para fornecer uma interface única para gerenciar o estoque, processar pagamentos e enviar pedidos.
Padrões Comportamentais
Os padrões comportamentais se concentram no comportamento de objetos em um sistema. Vamos ver dois exemplos:
1. Command
O padrão Command encapsula uma solicitação como um objeto, permitindo que você parametrize clientes com solicitações, filas ou registre solicitações e execute-as posteriormente.
Exemplo: Em um sistema de controle remoto, você pode usar o Command para encapsular comandos como "ligar", "desligar" e "aumentar volume" como objetos, permitindo que o usuário os execute de forma flexível.
2. Iterator
O padrão Iterator fornece uma maneira de acessar os elementos de um objeto de coleção sequencialmente, sem expor sua representação subjacente.
Exemplo: Em uma aplicação de processamento de texto, você pode usar o Iterator para percorrer uma lista de palavras em um documento sem se preocupar com a estrutura interna da lista.
Padrões GRASP
Os padrões GRASP (General Responsibility Assignment Software Patterns) são princípios fundamentais para atribuir responsabilidades a classes e objetos em um sistema. Aqui estão dois exemplos:
1. Controller
O padrão Controller é responsável por receber entradas do usuário, interpretá-las e chamar os métodos apropriados nos objetos do modelo.
Exemplo: Em um sistema de loja online, o Controller é responsável por receber solicitações de compra dos usuários, verificar os detalhes da compra e atualizar o estoque.
2. Expert
O padrão Expert sugere que uma responsabilidade deve ser atribuída à classe que possui as informações necessárias para cumpri-la.
Exemplo: Em um sistema de gerenciamento de clientes, a classe Cliente seria o Expert em informações sobre clientes, sendo responsável por manipular dados relacionados aos clientes.
Já sabe tudo sobre padrões de projetos?
Os padrões de projeto são como ferramentas em um kit de ferramentas de um desenvolvedor, oferecendo soluções testadas e comprovadas para problemas comuns de design de software. Ao entender e aplicar esses padrões de forma adequada, os desenvolvedores podem escrever código mais limpo, flexível e fácil de manter. No entanto, é importante lembrar que os padrões de projeto são apenas diretrizes e não soluções universais. Cada projeto é único e requer uma abordagem cuidadosamente adaptada às suas necessidades específicas. Com uma compreensão sólida dos padrões de projeto apresentados neste artigo, os desenvolvedores estão bem equipados para enfrentar os desafios do desenvolvimento de software com confiança e eficácia.


O que estudar sobre teste de software para concurso público?
Guia de Estudo: Teste de Software para Concursos Públicos
O teste de software é uma disciplina fundamental no desenvolvimento de sistemas de computador, garantindo que os programas sejam confiáveis, seguros e eficazes. Esse campo continua sendo um dos pilares essenciais para assegurar a qualidade das aplicações desenvolvidas. Para quem está se preparando para concursos públicos na área de Tecnologia da Informação (TI), compreender os princípios e práticas do teste de software é essencial. Neste artigo, forneceremos um guia didático abrangente com todos os tópicos importantes que você precisa dominar para se sair bem nas questões sobre teste de software nos concursos.
Conceitos Básicos
Os testes de software são essenciais para garantir que uma aplicação atenda aos requisitos do cliente e funcione conforme o esperado. Eles consistem na verificação e validação do comportamento e desempenho do software, confrontando se o sistema está tanto correto tecnicamente quanto certo para o usuário. A distinção entre "correto" e "certo" é crucial; um software pode estar tecnicamente correto, mas se não atender às necessidades do usuário, não será considerado certo.
Divisão Tradicional dos Testes
Tradicionalmente, os testes de software são divididos em níveis, técnicas e tipos. Os níveis incluem teste de unidade, teste de componente, teste de integração, teste de sistema, teste de regressão e teste de aceitação. As técnicas englobam teste caixa-branca (ou estrutural) e teste caixa-preta (ou funcional). Os tipos incluem teste de usabilidade, teste de desempenho, teste de carga, teste de estresse e teste de segurança.
Princípios dos Testes de Software
Verificação e Validação: Os testes buscam verificar se o software está correto tecnicamente e se atende às necessidades do usuário.
Detecção Precoce de Defeitos: Quanto mais cedo um defeito for detectado, mais fácil e barato será corrigi-lo.
Teste Exaustivo Impossível: É impossível testar todas as combinações de entrada e condições de operação de um software.
Teste de Probabilidade: Um bom caso de teste é aquele que tem alta probabilidade de encontrar um erro ainda não descoberto.
Níveis de Testes de Software
Teste de Unidade / Unitário: Avalia unidades isoladas do código-fonte.
Os testes unitários são a base do processo de testagem de software. Eles se concentram na verificação das menores partes do código, como funções ou métodos individuais. Através dos testes unitários, busca-se garantir que cada componente do sistema funcione corretamente de forma isolada, facilitando a detecção e correção de erros.
Teste de Componentes: Concentra-se na avaliação individual de módulos ou componentes do software.
Teste de Integração: Verifica a interação entre módulos ou sistemas do software.
Os testes de integração têm como objetivo verificar a interação entre diferentes módulos ou serviços do software. Nessa etapa, avalia-se como as diversas partes do sistema se comportam quando integradas, garantindo que funcionem harmoniosamente em conjunto.
Teste de Sistema: Valida o software como um todo, simulando o ambiente de produção.
Os testes de sistema são realizados para avaliar o software como um todo, verificando se todos os requisitos especificados foram atendidos. Essa fase é crucial para garantir que o sistema esteja pronto para ser implantado e utilizado pelos usuários finais.
Teste de Regressão: Verifica se alterações recentes no código-fonte não afetaram funcionalidades existentes.
Os testes de regressão visam garantir que as alterações recentes no código não afetaram negativamente as funcionalidades existentes do sistema. Essa prática é essencial para evitar a reintrodução de erros durante o desenvolvimento contínuo do software.
Teste de Aceitação: Avalia se o software está pronto para ser utilizado e se atende às expectativas dos usuários.
Os testes de aceitação são conduzidos pelos usuários finais do sistema para verificar se ele atende às suas necessidades e expectativas. Essa etapa é fundamental para validar se o software cumpre o seu propósito e se é fácil de usar na prática.
Testes automatizados:
Os testes automatizados utilizam ferramentas especializadas para executar os testes de forma automática, aumentando a eficácia e a eficiência do processo de testagem. Conhecer e dominar essas ferramentas é fundamental para profissionais de TI que buscam se destacar em concursos públicos.
Técnicas de Testes de Software
Teste Caixa-Branca / White-Box: Analisa a estrutura interna do código-fonte.
Teste Caixa-Preta / Black-Box: Concentra-se nas entradas e saídas esperadas, sem considerar a implementação interna.
Tipos de Testes de Software
Teste de Usabilidade: Avalia a facilidade de uso e experiência do usuário.
Teste de Desempenho / Performance: Avalia o desempenho do software em termos de velocidade e escalabilidade.
Teste de Carga: Verifica a capacidade do sistema em lidar com períodos de cargas variáveis.
Teste de Estresse / Esforço: Submete o sistema a condições extremas para observar seus limites.
Teste de Segurança: Avalia a resistência do software a ameaças e tentativas de violação.
Os testes de software desempenham um papel fundamental na garantia da qualidade das aplicações de software. Dominar os conceitos e técnicas de teste é essencial para profissionais de TI e candidatos a concursos públicos na área. Portanto, não se esqueça de praticar e fazer muitas questões para consolidar seu conhecimento nesse importante campo da Engenharia de Software.
Questões de testes de softwares
Dicas para estudo de teste de software
1. Conceitos Fundamentais de Teste de Software:
Os conceitos básicos de teste de software incluem tipos de teste, estratégias de teste e o processo de teste. Entenda a diferença entre testes unitários, de integração, de sistema e de aceitação. Conheça as estratégias de teste, como caixa branca, caixa preta, teste de regressão e teste de carga. Compreenda o processo de teste, que envolve planejamento, design, execução e avaliação de testes.
2. Ciclo de Vida do Teste de Software:
Saiba como o teste de software se encaixa em diferentes fases do ciclo de vida do desenvolvimento de software, desde a elicitação de requisitos até a manutenção do sistema em produção. Estude os modelos de ciclo de vida de desenvolvimento de software mais comuns e entenda o papel do teste em cada fase.
3. Técnicas e Ferramentas de Teste:
Aprenda técnicas de design de casos de teste, como particionamento de equivalência e análise de valor limite. Familiarize-se com ferramentas de automação de teste, como Selenium e JUnit, e ferramentas de gerenciamento de defeitos, como Bugzilla e Jira.
4. Qualidade de Software:
Explore métricas de qualidade de software, como cobertura de código, taxa de defeitos e taxa de falhas. Conheça normas e padrões de qualidade reconhecidos, como ISO/IEC 25000 (SQuaRE) e CMMI, e entenda a diferença entre garantia de qualidade e controle de qualidade.
5. Processo de Certificação e Padrões de Teste:
Saiba mais sobre as certificações em teste de software, como ISTQB, CSTE e CSQA, e os padrões de teste reconhecidos internacionalmente, como IEEE 829 e ISO/IEC 29119.
6. Aspectos Legais e Éticos do Teste de Software:
Entenda as responsabilidades legais dos testadores e as questões éticas relacionadas à privacidade, segurança e conformidade.
7. Desafios Específicos e Tendências em Teste de Software:
Explore os desafios atuais do teste de software, como teste em ambientes ágeis, teste de aplicativos móveis e teste de segurança. Esteja por dentro das tendências emergentes nesta área em constante evolução.
Ao estudar esses tópicos de forma sistemática e praticar com questões de concursos anteriores, você estará bem preparado para enfrentar qualquer desafio relacionado ao teste de software em concursos públicos na área de TI. Lembre-se de utilizar fontes confiáveis, como livros didáticos e materiais de preparação para certificações reconhecidas, e de manter-se atualizado com as últimas tendências e desenvolvimentos nesta disciplina crucial para a indústria de tecnologia da informação.
Compreender os diferentes tipos de testes e as melhores práticas associadas a eles é essencial para quem busca sucesso em concursos públicos na área de Tecnologia da Informação. Dominar esse conhecimento não só contribui para o avanço na carreira, mas também para a entrega de soluções de software mais robustas e seguras.


Qual conceito em banco de dados representa uma sequência de execução que deve conservar a mesma ordem de execução das ações das suas transações?
QUESTÃO 49 – No controle de proteção, integridade e concorrência, trata-se de uma lista de ações
de um conjunto de transações. Representa uma sequência de execução que deve conservar a mesma
ordem de execução das ações das suas transações. Esse é o conceito de:
A) Controle de concorrência.
B) Serialização.
C) Escalonamento.
D) ACID (Atomicidade, Consistência, Isolamento e Durabilidade).
E) Recuperação do SGBD.
Vamos analisar cada alternativa:
A) Controle de concorrência: O controle de concorrência refere-se à gestão de acessos simultâneos a recursos compartilhados por múltiplas transações. Embora relacionado ao conceito descrito na questão, não se refere diretamente à lista de ações de um conjunto de transações.
B) Serialização: A serialização é um conceito relacionado à execução de transações em uma ordem sequencial, uma após a outra, em vez de simultaneamente. Embora relacionado ao conceito descrito na questão, não é a definição exata fornecida.
C) Escalonamento: O escalonamento é o conceito descrito na questão. Trata-se da lista de ações de um conjunto de transações, representando uma sequência de execução que deve conservar a mesma ordem de execução das ações das suas transações. O escalonamento é crucial para garantir a integridade, proteção e concorrência em bancos de dados transacionais.
D) ACID (Atomicidade, Consistência, Isolamento e Durabilidade): ACID é um conjunto de propriedades que garantem a confiabilidade das transações em um banco de dados. Embora relacionado à integridade e consistência dos dados, não se refere diretamente à lista de ações de transações descrita na questão.
E) Recuperação do SGBD: A recuperação do SGBD refere-se aos mecanismos implementados em um sistema de gerenciamento de banco de dados para recuperar dados em caso de falhas. Não está diretamente relacionado ao conceito de lista de ações de um conjunto de transações.
Portanto, a resposta correta é a letra C) Escalonamento. Este é o conceito que representa a lista de ações de um conjunto de transações, garantindo uma ordem de execução consistente para manter a integridade, proteção e concorrência no banco de dados.


Questão 24 - HCPA 2019 - ANALISTA DE TI (QUALIDADE DE SOFTWARE)
Instrução: Para responder às questões 24 e 25, considere a seguinte tabela de pacientes em um banco de dados Oracle.
CODIGO NOME DATA_CADASTRO MAE_CODIGO
100 JOAO DA SILVA 01/03/2019 12:31:15 102
101 JOSE DA SILVA 01/03/2019 12:31:59 102
102 MARIA DA SILVA 01/03/2019 12:40:35 105
103 JOAO SANTOS 02/03/2019 13:20:05 NULL
104 JOSE SANTOS 02/03/2019 13:20:30 NULL
105 MARIA SANTOS 10/03/2019 13:20:59 NULL
24. Observe os comandos, a seguir, executados no banco de dados Oracle.
I - SELECT PAC.CODIGO, PAC.NOME, PAC.MAE_CODIGO, MAE.NOME AS NOME_MAE FROM PACIENTES PAC INNER
JOIN PACIENTES MAE ON PAC.MAE_CODIGO = MAE.CODIGO;
II - SELECT PAC.CODIGO, PAC.NOME, PAC.MAE_CODIGO, MAE.NOME AS NOME_MAE FROM PACIENTES PAC, PACIENTES
MAE WHERE PAC.MAE_CODIGO = MAE.CODIGO;
III - SELECT PAC.CODIGO, PAC.NOME, PAC.MAE_CODIGO, MAE.NOME AS NOME_MAE FROM PACIENTES PAC LEFT
OUTER JOIN PACIENTES MAE ON PAC.MAE_CODIGO = MAE.CODIGO;
IV - SELECT PAC.CODIGO, PAC.NOME, PAC.MAE_CODIGO, MAE.NOME AS NOME_MAE FROM PACIENTES PAC RIGHT
OUTER JOIN PACIENTES MAE ON PAC.MAE_CODIGO = MAE.CODIGO;
Quais comandos podem apresentar o nome da mãe do paciente?
(A) Apenas II.
(B) Apenas I e II.
(C) Apenas I e III.
(D) Apenas I, II e III.
(E) I, II, III e IV.
Questão 24: Comandos SQL para Retornar Dados Relacionados
Nesta questão, analisamos diferentes comandos SQL executados em um banco de dados Oracle para retornar informações relacionadas entre pacientes e suas mães. Vamos verificar cada comando:
I - INNER JOIN: Realiza uma junção interna entre a tabela de pacientes e a tabela de mães com base no código da mãe. Este comando retorna apenas os registros que possuem um código de mãe correspondente na tabela de mães.
II - WHERE clause: Realiza uma junção implícita entre as tabelas de pacientes e mães com base no código da mãe. Funciona de forma semelhante ao INNER JOIN, mas usando a cláusula WHERE para especificar a condição de junção.
III - LEFT OUTER JOIN: Realiza uma junção externa à esquerda entre pacientes e mães, retornando todos os registros da tabela de pacientes, mesmo que não haja correspondência na tabela de mães.
IV - RIGHT OUTER JOIN: Realiza uma junção externa à direita, retornando todos os registros da tabela de mães, mesmo que não haja correspondência na tabela de pacientes.
Considerando que a mãe de um paciente pode estar ausente na tabela de pacientes, apenas os comandos I e III podem apresentar o nome da mãe do paciente. Portanto, a alternativa correta é (C) Apenas I e III.
Para entender esses conceitos, é importante estudar os diferentes tipos de junção em SQL (INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN) e como eles funcionam em consultas relacionadas.
Inglês técnico:
INNER JOIN
Significado: Junção Interna.
Aplicação: O INNER JOIN é utilizado para combinar linhas de duas ou mais tabelas com base em uma condição de correspondência especificada. Essa condição é geralmente estabelecida com a cláusula ON, onde as colunas das tabelas envolvidas são comparadas para determinar as linhas que devem ser combinadas. O INNER JOIN retorna apenas as linhas que possuem correspondência em ambas as tabelas envolvidas na junção. Por exemplo, ao executar a consulta SELECT pedidos.id, clientes.nome FROM pedidos INNER JOIN clientes ON pedidos.cliente_id = clientes.id, estamos combinando as tabelas de pedidos e clientes com base no ID do cliente, retornando apenas os pedidos que têm uma correspondência na tabela de clientes.
LEFT OUTER JOIN
Significado: Junção Externa à Esquerda.
Aplicação: O LEFT OUTER JOIN é utilizado para combinar todas as linhas da tabela à esquerda (tabela especificada antes do JOIN) com as linhas correspondentes da tabela à direita (tabela especificada após o JOIN), e retorna NULL para as colunas da tabela à direita quando não há correspondência. Isso significa que mesmo que não haja correspondência na tabela à direita, todas as linhas da tabela à esquerda serão incluídas no resultado. O LEFT OUTER JOIN é útil quando se deseja incluir todas as informações de uma tabela, independentemente de haver uma correspondência na tabela relacionada. Por exemplo, ao executar a consulta SELECT clientes.nome, pedidos.id FROM clientes LEFT OUTER JOIN pedidos ON clientes.id = pedidos.cliente_id, estamos recuperando todos os clientes, mesmo aqueles que ainda não fizeram pedidos.
RIGHT OUTER JOIN
Significado: Junção Externa à Direita.
Aplicação: O RIGHT OUTER JOIN é semelhante ao LEFT OUTER JOIN, mas garante que todas as linhas da tabela à direita (tabela especificada após o JOIN) sejam incluídas no resultado, independentemente de haver uma correspondência na tabela à esquerda. Quando não há correspondência na tabela à esquerda, são retornados valores NULL para as colunas da tabela à esquerda. O RIGHT OUTER JOIN é menos comum que o LEFT OUTER JOIN, mas pode ser útil em certas situações onde se deseja garantir a inclusão de todas as linhas de uma tabela específica. Por exemplo, ao executar a consulta SELECT pedidos.id, clientes.nome FROM pedidos RIGHT OUTER JOIN clientes ON pedidos.cliente_id = clientes.id, estamos recuperando todos os pedidos, mesmo aqueles que não têm um cliente correspondente.
Em resumo, dominar esses comandos SQL essenciais capacita os desenvolvedores e analistas de banco de dados a recuperar e manipular dados de forma eficiente, otimizando o desempenho do banco de dados e aumentando a produtividade geral.


Questão 2 - HCPA 2020 - ANALISTA DE TI (ADMINISTRAÇÃO DE BANCO DE DADOS)
Controle de Transações e Propriedades ACID em SGBDs
O controle de transações é parte fundamental de qualquer SGBD. Esse controle é realizado pelo conjunto de quatro propriedades conhecidas pelo acrônimo ACID.
A propriedade _____________ garante que todas as tarefas de uma transação sejam executadas por completo, ou seja, não há transações parciais.
Já a propriedade ___________ garante que o efeito de uma transação não seja visível para outras transações até que a transação seja confirmada. Por exemplo, um usuário que atualiza a tabela hr.employees não vê as alterações não confirmadas na tabela funcionários feitas simultaneamente por outro usuário.
E a propriedade __________ garante que as alterações feitas por transações confirmadas sejam permanentes.
Após a conclusão de uma transação, o banco de dados garante, por meio de seus mecanismos de recuperação, que as alterações da transação não sejam perdidas.
Assinale a alternativa que completa, correta e respectivamente, as lacunas do texto acima.
(A) Durabilidade – Isolamento – Atomicidade
(B) Isolamento – Durabilidade – Atomicidade
(C) Atomicidade – Isolamento – Durabilidade
(D) Durabilidade – Atomicidade – Isolamento
(E) Isolamento – Durabilidade – Atomicidade
Alternativa Correta e Justificativa
A alternativa correta para preencher as lacunas do texto é a opção:
(c) Atomicidade – Isolamento – Durabilidade
Atomicidade: Garante que todas as tarefas de uma transação sejam executadas por completo, ou seja, não há transações parciais.
Isolamento: Garante que o efeito de uma transação não seja visível para outras transações até que a transação seja confirmada.
Durabilidade: Garante que as alterações feitas por transações confirmadas sejam permanentes.
Contextualização da Questão
O controle de transações é uma parte fundamental de qualquer Sistema de Gerenciamento de Banco de Dados (SGBD), garantindo a integridade e consistência dos dados. Um dos conjuntos de propriedades mais importantes para o controle de transações é conhecido pelo acrônimo ACID: Atomicidade, Consistência, Isolamento e Durabilidade.
A questão aborda três das quatro propriedades ACID e sua importância no contexto das transações em um SGBD. Vamos analisar cada uma delas e suas implicações:
Atomicidade:
A atomicidade garante que todas as tarefas de uma transação sejam executadas por completo (tudo ou nada). Ou seja, se uma parte da transação falhar, todas as partes da transação são desfeitas, e o banco de dados é restaurado para o estado anterior à transação.
Consistência (não mencionada na questão):
A consistência garante que o banco de dados permaneça em um estado consistente antes e depois de cada transação. Isso significa que apenas transações válidas que preservem as regras de integridade do banco de dados são permitidas.
Isolamento:
O isolamento garante que o efeito de uma transação não seja visível para outras transações até que a transação seja confirmada. Isso significa que as transações concorrentes não interferem umas nas outras e que cada transação é executada como se fosse a única no sistema.
Durabilidade:
A durabilidade garante que as alterações feitas por transações confirmadas sejam permanentes, mesmo em caso de falha do sistema. Após a confirmação de uma transação, o SGBD garante que as alterações sejam persistentes, mesmo em caso de falha de hardware ou software.
Nível de Dificuldade e Tópicos Relacionados
Nível de Dificuldade: Médio
Tópicos Relacionados:
- Controle de transações em SGBDs
- Propriedades ACID (Atomicidade, Consistência, Isolamento e Durabilidade)
- Conceitos de integridade e consistência de dados
- Funcionamento interno de transações em bancos de dados
Relação com o Edital do HCPA
Essa questão está alinhada com o edital do HCPA, que menciona a administração de bancos de dados e sistemas de gerenciamento de banco de dados como parte do escopo do cargo. Compreender as propriedades ACID é essencial para a administração eficaz de bancos de dados relacionais.
Dominar esses tópicos é fundamental para compreender os aspectos críticos do gerenciamento de transações em bancos de dados relacionais e garantir a integridade e a consistência dos dados armazenados.


Quais das funções não estão disponíveis no Microsoft Windows Server 2016?
QUESTÃO 41 – São funções de servidor disponíveis no Microsoft Windows Server 2016, EXCETO:
A) DHCP Server.
B) Internet Information Services (IIS).
C) Hyper-V.
D) Database Manager OnDemand.
E) DNS Server.
A questão aborda as funções de servidor disponíveis no Microsoft Windows Server 2016. Vamos analisar cada opção:
A) DHCP Server:
O DHCP Server é uma função de servidor disponível no Microsoft Windows Server 2016. Ele fornece configurações automáticas de endereços IP e outros parâmetros de rede para dispositivos em uma rede IP. Portanto, esta opção está incorreta.
B) Internet Information Services (IIS):
O Internet Information Services (IIS) é uma função de servidor disponível no Microsoft Windows Server 2016. Ele é usado para hospedar sites e aplicativos da web. Portanto, esta opção está incorreta.
C) Hyper-V:
O Hyper-V é uma função de servidor disponível no Microsoft Windows Server 2016. Ele fornece virtualização de hardware, permitindo que vários sistemas operacionais sejam executados em um único servidor físico. Portanto, esta opção está incorreta.
D) Database Manager OnDemand:
Esta é a opção correta. O "Database Manager OnDemand" não é uma função de servidor disponível no Microsoft Windows Server 2016. Esta opção está correta porque se trata de uma função que não existe dentro do conjunto de funções padrão do Windows Server 2016.
E) DNS Server:
O DNS Server é uma função de servidor disponível no Microsoft Windows Server 2016. Ele é usado para traduzir nomes de domínio em endereços IP e vice-versa. Portanto, esta opção está incorreta.
Assim, a resposta correta é a letra D) Database Manager OnDemand.
O assunto tratado na questão é as funções de servidor disponíveis no Microsoft Windows Server 2016. Para responder corretamente a essa questão, é necessário estar familiarizado com as diferentes funções e serviços oferecidos pelo sistema operacional Windows Server 2016. Estudar sobre administração de servidores Windows e suas funcionalidades pode ajudar a responder a esse tipo de questão.


Quais alternativas sobre soap são verdadeiras e quais são falsas?
QUESTÃO 31 – Sobre a utilização de Web Services, analise as assertivas abaixo, assinalando V, se
verdadeiras, ou F, se falsas.
( ) A WSDL é uma notação XML para descrição de Web Services.
( ) Uma API que implementa a arquitetura REST é chamada de API RESTful.
( ) Mensagens SOAP são enviadas exclusivamente através de HTTP.
A ordem correta de preenchimento dos parênteses, de cima para baixo, é:
A) F – F – F.
B) F – F – V.
C) F – V – F.
D) V – V – V.
E) V – V – F.
Assunto: Web Services
Aspectos relacionados a Web Services e suas definições.
Relacionada a Web Services: Conceitos e descrições.
Resposta: E) V – V – F.
Justificativa: A WSDL é uma notação XML para descrição de Web Services (Verdadeiro). Uma API que implementa a arquitetura REST é chamada de API RESTful (Verdadeiro). Mensagens SOAP não são enviadas exclusivamente através de HTTP (Falso).
Além de http como uma mensagem soap pode ser enviada?
Além do HTTP, mensagens SOAP (Simple Object Access Protocol) podem ser enviadas através de outros protocolos de transporte. SOAP é um protocolo de comunicação baseado em XML usado para trocar informações estruturadas entre sistemas de computador. Enquanto HTTP é o protocolo de transporte mais comum para comunicação via SOAP devido à sua ampla adoção na web, SOAP também pode ser usado com outros protocolos.
Alguns exemplos de outros protocolos de transporte que podem ser usados para enviar mensagens SOAP incluem:
SMTP (Simple Mail Transfer Protocol): SOAP pode ser encapsulado em mensagens de e-mail e enviado através de servidores de e-mail. Isso é comumente usado em integrações legadas ou sistemas que ainda dependem de comunicação via e-mail.
TCP (Transmission Control Protocol): SOAP pode ser enviado diretamente sobre uma conexão TCP estabelecida. Isso é útil em cenários onde a comunicação é necessária em tempo real e uma conexão persistente entre os sistemas é preferível.
JMS (Java Message Service): Em ambientes baseados em Java, mensagens SOAP podem ser trocadas usando o JMS, que é uma API para envio e recebimento de mensagens entre sistemas distribuídos.
MQTT (Message Queuing Telemetry Transport): MQTT é um protocolo de mensagens leve usado em cenários de Internet das Coisas (IoT). Embora menos comum para SOAP, é possível encapsular mensagens SOAP em tópicos MQTT e trocá-las entre dispositivos e servidores.
AMQP (Advanced Message Queuing Protocol): Similar ao MQTT, AMQP é um protocolo de mensagens que suporta mensagens estruturadas. Pode ser utilizado para transporte de mensagens SOAP em sistemas de mensagens distribuídas.
Esses são apenas alguns exemplos de protocolos alternativos que podem ser usados para transportar mensagens SOAP. A escolha do protocolo de transporte depende dos requisitos do sistema, das restrições de segurança, da infraestrutura existente e de outros fatores específicos do contexto de implantação.


Questão 3 - HCPA 2020 - ANALISTA DE TI (DESENVOLVIMENTO)
Considere as tabelas aip_pacientes e agh_atendimentos abaixo:
[COLOCAR IMAGEM]
No SGBD Oracle, a consulta que retorna o nome do aip_pacientes e a quantidade de agh_atendimentos para pacientes que tiveram mais de 10 agh_atendimentos no hospital é:
(A) SELECT nome, COUNT(*) AS QUANTIDADE FROM aip_pacientes, agh_atendimentos WHERE codigo = pac_codigo AND COUNT(*) > 10
(B) SELECT nome FROM aip_pacientes, agh_atendimentos WHERE codigo = pac_codigo AND COUNT(*) > 10 GROUP BY codigo
(C) SELECT nome, count(*) AS QUANTIDADE FROM aip_pacientes, agh_atendimentos WHERE codigo = pac_codigo GROUP BY nome HAVING COUNT(*) >10
(D) SELECT nome, COUNT(*) AS QUANTIDADE FROM aip_pacientes, agh_atendimentos WHERE codigo = pac_codigo AND QUANTIDADE > 10 GROUP BY codigo
(E) SELECT nome, COUNT(*) AS QUANTIDADE FROM aip_pacientes, agh_atendimentos WHERE codigo = pac_codigo GROUP BY codigo HAVING QUANTIDADE >10
Vamos analisar cada opção:
(A) SELECT nome, COUNT() AS QUANTIDADE FROM aip_pacientes, agh_atendimentos WHERE codigo = pac_codigo AND COUNT() > 10: Esta consulta tem um problema na cláusula WHERE. Não é possível usar COUNT(*) diretamente na cláusula WHERE. Além disso, falta a cláusula GROUP BY para agrupar por nome e contar a quantidade de atendimentos.
(B) SELECT nome FROM aip_pacientes, agh_atendimentos WHERE codigo = pac_codigo AND COUNT(*) > 10 GROUP BY codigo: Nesta consulta, falta a função de agregação COUNT(*) na seleção dos campos, e a cláusula GROUP BY não está corretamente configurada para calcular a contagem de atendimentos.
(C) SELECT nome, count() AS QUANTIDADE FROM aip_pacientes, agh_atendimentos WHERE codigo = pac_codigo GROUP BY nome HAVING COUNT() >10: Esta consulta está correta. Ela seleciona o nome dos pacientes, realiza um join entre as tabelas aip_pacientes e agh_atendimentos, agrupa os resultados pelo nome do paciente, conta a quantidade de atendimentos para cada paciente e aplica a condição HAVING para filtrar apenas aqueles com mais de 10 atendimentos.
(D) SELECT nome, COUNT(*) AS QUANTIDADE FROM aip_pacientes, agh_atendimentos WHERE codigo = pac_codigo AND QUANTIDADE > 10 GROUP BY codigo: Esta consulta tenta usar a variável QUANTIDADE na cláusula WHERE, o que não é possível. Além disso, falta a cláusula HAVING para aplicar a condição de contagem.
(E) SELECT nome, COUNT(*) AS QUANTIDADE FROM aip_pacientes, agh_atendimentos WHERE codigo = pac_codigo GROUP BY codigo HAVING QUANTIDADE >10: Aqui, também há tentativa de usar a variável QUANTIDADE na cláusula HAVING sem ser definida na consulta. Além disso, a contagem deveria ser feita pelo nome do paciente, não pelo código.
Portanto, a única opção correta é a (C).
O assunto principal abordado na questão é o uso de JOIN, GROUP BY, COUNT, WHERE e HAVING em consultas SQL para filtrar e agrupar dados de múltiplas tabelas. Para dominar esse assunto, é fundamental compreender como usar corretamente essas cláusulas para obter os resultados desejados.


Questão 3 - HCPA 2020 - ANALISTA DE TI (ADMINISTRAÇÃO DE BANCO DE DADOS)
Explorando Parâmetros do Data Pump Export em Oracle
Considere os parâmetros abaixo.
I - DIRECTORY
II - LOG
III - SCHEMAS
Quais dos parâmetros disponíveis na linha de comando, entre os acima listados, fazem parte do Data Pump Export?
(A) Apenas I.
(B) Apenas II.
(C) Apenas III.
(D) Apenas I e III.
(E) Apenas II e III.
Alternativa Correta e Justificativa
De acordo com o gabarito da prova, a alternativa correta é a opção:
D Apenas I e III.
DIRECTORY (I): O parâmetro DIRECTORY é usado para especificar o diretório onde os arquivos de exportação serão gravados. Portanto, está relacionado ao Oracle Data Pump Export.
SCHEMAS (III): O parâmetro SCHEMAS é usado para especificar os esquemas de banco de dados a serem exportados, sendo uma parte essencial do Oracle Data Pump Export.
A questão aborda os parâmetros disponíveis na linha de comando do Oracle Data Pump Export. Vamos analisar cada um dos parâmetros mencionados (DIRECTORY, LOG, SCHEMAS) e identificar quais fazem parte do Oracle Data Pump Export.
Parâmetros do Oracle Data Pump Export
DIRECTORY:
O parâmetro DIRECTORY no Oracle Data Pump Export especifica o diretório no banco de dados onde os arquivos de exportação devem ser gravados. Ele define o local físico no sistema de arquivos onde os arquivos de exportação serão escritos.
LOG:
O parâmetro LOG no Oracle Data Pump Export especifica o nome do arquivo de log a ser usado durante a operação de exportação. O arquivo de log registra informações detalhadas sobre o processo de exportação, incluindo quais objetos foram exportados e quaisquer mensagens de erro encontradas durante a operação.
SCHEMAS:
O parâmetro SCHEMAS no Oracle Data Pump Export especifica os esquemas de banco de dados a serem exportados. Ele permite que você especifique um ou mais esquemas cujos objetos devem ser incluídos na operação de exportação.
Nível de Dificuldade e Tópicos Relacionados
Nível de Dificuldade: Fácil a Médio
Tópicos Relacionados:
- Oracle Data Pump Export
- Parâmetros de linha de comando do Oracle Data Pump
- Exportação de dados e metadados em bancos de dados Oracle
Principal Assunto e Relação com o Edital do HCPA
O principal assunto abordado nesta questão é o Oracle Data Pump Export, uma ferramenta usada para exportar dados e metadados em bancos de dados Oracle. Essa questão está alinhada com o edital do HCPA, que menciona a administração de bancos de dados como parte do escopo do cargo.
Dominar esses tópicos é crucial para entender como usar o Oracle Data Pump Export para realizar operações de exportação de dados e metadados de maneira eficiente e precisa em ambientes Oracle.
Inglês técnico
Oracle Data Pump Export
Significado: Exportação do Oracle Data Pump
Aplicação: é uma ferramenta fornecida pela Oracle para extrair dados e metadados de um banco de dados Oracle e armazená-los em um conjunto de arquivos de exportação. Ele é usado para realizar backups lógicos de bancos de dados, migrar dados entre bancos de dados e mover dados entre diferentes versões do Oracle. A exportação do Oracle Data Pump gera um arquivo de exportação que contém definições de objetos (tabelas, índices, etc.) e os próprios dados.
DIRECTORY
Significado: Diretório
Aplicação: é um objeto de banco de dados que aponta para um diretório do sistema operacional no servidor de banco de dados. Ele é usado para permitir que o banco de dados acesse e manipule arquivos no sistema de arquivos do servidor. Os diretórios são frequentemente utilizados em conjunto com o Oracle Data Pump para especificar onde os arquivos de exportação ou importação devem ser armazenados ou lidos.
LOG
Significado: Registro
Aplicação: refere-se a um arquivo de registro que registra as operações e mensagens durante o processo de exportação. Esse arquivo de log fornece informações detalhadas sobre o progresso da exportação, erros encontrados, objetos exportados com sucesso, entre outros. O arquivo de log é uma ferramenta essencial para monitorar e solucionar problemas durante o processo de exportação de dados.
SCHEMAS
Significado: Esquemas
Aplicação: é uma coleção de objetos de banco de dados (como tabelas, visualizações, índices, procedimentos armazenados, etc.) associados a um usuário de banco de dados. Cada usuário de banco de dados no Oracle tem seu próprio esquema, que serve como um namespace para os objetos que ele cria ou possui. Ao usar o Oracle Data Pump Export, é possível exportar os objetos de um ou mais esquemas para um arquivo de exportação, permitindo assim a cópia ou migração dos dados e estruturas de um banco de dados para outro.


Qual a camada mais baixa do modelo TCP/IP?
QUESTÃO 27 – Qual é a camada mais baixa do modelo de referência TCP/IP?
A) Transporte.
B) Física.
C) Enlace.
D) Internet.
E) Aplicação.
Essa questão trata dos conceitos do modelo de referência TCP/IP.
Vamos analisar cada opção:
A) Transporte: Esta é a camada responsável pelo transporte de dados fim a fim, garantindo a entrega confiável de dados entre hosts. Exemplos de protocolos nesta camada incluem TCP (Transmission Control Protocol) e UDP (User Datagram Protocol). No entanto, a camada de transporte não é a camada mais baixa do modelo TCP/IP.
B) Física: Esta não é uma camada diretamente associada ao modelo TCP/IP. Ela é a camada que lida com a transmissão física de dados sobre o meio de comunicação, incluindo as especificações elétricas, mecânicas e funcionais do hardware. Exemplos de tecnologias nesta camada incluem Ethernet, Wi-Fi e cabos de fibra óptica. Embora seja a camada mais baixa em alguns modelos de referência, como o modelo OSI, no modelo TCP/IP não é.
C) Enlace: Esta é a camada mais baixa do modelo de referência TCP/IP. Ela lida com o acesso ao meio e a transmissão confiável de dados entre dispositivos na mesma rede física. Esta camada inclui subcamadas como Ethernet, Wi-Fi, PPP (Point-to-Point Protocol) e outras tecnologias de acesso à rede.
D) Internet: Esta camada é responsável pela roteamento de pacotes de dados entre redes diferentes. Ela lida com a seleção de rotas e o encaminhamento dos pacotes através da rede global. Embora essencial para o funcionamento da Internet, não é a camada mais baixa do modelo TCP/IP.
E) Aplicação: Esta é a camada mais alta do modelo TCP/IP. Ela fornece serviços de rede para os aplicativos de usuário finais, como serviços de e-mail, transferência de arquivos e acesso à web. Embora seja a camada mais alta, não é a camada mais baixa do modelo TCP/IP.
Portanto, a resposta correta é a letra C) Enlace, pois é a camada mais baixa do modelo de referência TCP/IP. As outras opções não estão corretas porque se referem a camadas diferentes do modelo TCP/IP.
Informações complementares sobre TCP/IP
Quais as camadas do TCP/IP?
O modelo TCP/IP, ou o conjunto de protocolos TCP/IP, consiste em quatro camadas principais, que são:
Camada de Aplicação: Esta camada é responsável pela interação com os aplicativos de usuário final, fornecendo serviços de rede, como e-mail, transferência de arquivos, navegação na web, entre outros. Exemplos de protocolos nesta camada incluem HTTP, SMTP, FTP, DNS.
Camada de Transporte: Esta camada é responsável por garantir a entrega confiável de dados entre os hosts, oferecendo controle de fluxo, controle de congestionamento e segmentação de dados. Os principais protocolos nesta camada são TCP (Transmission Control Protocol) e UDP (User Datagram Protocol).
Camada de Internet: Esta camada lida com o roteamento de pacotes de dados entre redes diferentes. Ela é responsável pela seleção de rotas e encaminhamento dos pacotes pela rede global. O protocolo principal nesta camada é o IP (Internet Protocol).
Camada de Acesso à Rede (ou Interface de Rede): Esta camada é responsável pela transmissão de dados entre dispositivos na mesma rede física. Ela lida com o acesso ao meio e a transmissão confiável de dados entre os dispositivos. Exemplos de tecnologias nesta camada incluem Ethernet, Wi-Fi, PPP (Point-to-Point Protocol), entre outros.
Essas são as quatro camadas principais do modelo TCP/IP, que fornecem uma estrutura para a comunicação de dados em redes de computadores. Cada camada possui seus próprios protocolos e funções específicas, e a comunicação entre as camadas é realizada por meio de interfaces bem definidas.
O modelo TCP/IP tem 4 ou 5 camadas?
O modelo TCP/IP é frequentemente apresentado com quatro camadas principais. No entanto, em algumas discussões e documentações, é comum dividir a camada de Acesso à Rede em duas camadas distintas: Camada de Enlace (ou Link) e Camada de Rede (ou Internet). Nesse caso, o modelo TCP/IP teria cinco camadas:
Camada de Aplicação
Camada de Transporte
Camada de Internet (ou Rede)
Camada de Enlace (ou Link)
Camada Física
Essa divisão é semelhante ao modelo OSI (Open Systems Interconnection), que tem sete camadas, incluindo uma camada física e uma camada de enlace. No entanto, é importante ressaltar que essa divisão em cinco camadas não é universalmente adotada, e muitas vezes o modelo TCP/IP é discutido apenas com as quatro camadas principais.
Portanto, para evitar confusões, é mais preciso dizer que o modelo TCP/IP possui quatro camadas principais, mas em algumas discussões e documentações, pode ter também a canada física totalizando 5 camadas.


Qual o tipo de E-R usar no diagrama?
Questão 11 - Retirada do CONCURSO PÚBLICO Nº 04/2017 do HOSPITAL DE CLÍNICAS de Porto Alegre RS – da FAURGS para o cargo de ANALISTA DE TI I (Analista de Negócios)
Considere o diagrama ER abaixo.
Descrição do diagrama ER:
Um retângulo escrito Especialidade, na parte superior ligado a um triangulo por uma linha reta, esse triangulo se liga a três outros retângulos com linhas retas. Nos retângulos de baixo ligado ao triangulo estão escritos cirurgia, clinica geral, psicologia.
Uma das etapas, na criação de um banco de dados, é a modelagem na forma de diagrama de entidade-relacionamento.
Assinale a alternativa que apresenta, de forma correta, o tipo de diagrama de entidade-relacionamento representado
na figura acima.
(A) Generalização/especialização.
(B) Relacionamento ternário.
(C) Entidade associativa.
(D) Relacionamento por herança.
(E) Relacionamento binário.
Qual a alternativa correta de acordo com o gabarito?
De acordo com o gabarito a resposta correta é a A.
Por que a letra A é a alternativa correta?
A alternativa correta é Generalização/especialização, pois o retângulo superior "Especialidade" é uma entidade genérica que possui três subtipos representados pelos retângulos inferiores "Cirurgia", "Clínica Geral" e "Psicologia". A linha reta que conecta a entidade genérica aos subtipos representa a relação de especialização.
Por que as outras alternativas estão erradas?
As outras alternativas estão incorretas porque não se aplicam ao diagrama ER apresentado.
A alternativa B Relacionamento ternário não se aplica porque o diagrama não apresenta uma relação entre três entidades distintas.
A alternativa C Entidade associativa não se aplica porque a entidade intermediária representada no diagrama não possui atributos próprios e não representa uma relação entre outras entidades.
A alternativa D Relacionamento por herança não se aplica porque o diagrama não apresenta uma relação hierárquica entre entidades, com uma entidade filha herdando atributos e relacionamentos de uma entidade pai.
A alternativa E Relacionamento binário não se aplica porque o diagrama apresenta uma relação entre uma entidade genérica e seus subtipos, o que é representado por uma linha reta que conecta a entidade genérica aos subtipos.
Quais os assuntos dessa questão?
A questão se enquadra no assunto de Banco de Dados Relacional, mais especificamente na modelagem de dados utilizando diagrama de entidade-relacionamento (E-R).
Qual o conhecimento necessário para responder corretamente essa questão?
Para responder corretamente a essa questão, é necessário ter conhecimento sobre modelagem de dados e diagrama de entidade-relacionamento (E-R), que são técnicas utilizadas na criação de um banco de dados. Também é importante entender os conceitos de entidade genérica e subtipos na modelagem E-R.
Veja mais em:


Quais são sistemas de arquivos suportados pelo Microsoft Windows Server 2016?
QUESTÃO 15 – Analise as assertivas abaixo:
I. Ext4
II. NTFS
III. ReFS
IV. JFS
Quais são sistemas de arquivos suportados pelo Microsoft Windows Server 2016?
A) Apenas II.
B) Apenas I e IV.
C) Apenas II e III.
D) Apenas I, III e IV.
E) I, II, III e IV.
Assuntos:
Resposta correta:
Outras alternativas


Qual comando é responsável por criar uma instância de uma classe em Java?
E: QUESTÃO 39 – Analise o código Java abaixo:
public class Main {
public static void main(String[] args) {
Supervisor pessoa = new Supervisor();
pessoa.valorAdicional (180);
supervisor.calcularVendas
}
}
Qual comando é responsável por criar uma instância de uma classe?
A) main
B) public
C) static
D) void
E) new
A questão aborda a análise de um trecho de código Java e pede para identificar qual comando é responsável por criar uma instância de uma classe.
Vamos analisar cada alternativa:
A) main: Este é o método principal (main) em Java, responsável por iniciar a execução do programa. Não está diretamente relacionado à criação de instâncias de classes.
B) public: Este é um modificador de acesso que especifica que o método ou membro de uma classe é acessível a outras classes. Não está diretamente relacionado à criação de instâncias de classes.
C) static: Este é um modificador que indica que o método ou variável pertence à classe em vez de instâncias individuais da classe. Não está diretamente relacionado à criação de instâncias de classes.
D) void: Este é um tipo de retorno que indica que o método não retorna nenhum valor. Não está diretamente relacionado à criação de instâncias de classes.
E) new: Este é o operador usado em Java para criar uma nova instância de uma classe. Ao usar o operador "new", você está alocando memória para um novo objeto da classe especificada. Portanto, esta é a resposta correta para a questão.
Portanto, a resposta correta é a letra E) new. Este é o comando responsável por criar uma instância de uma classe em Java.


Qual conceito que consiste na alteração do funcionamento interno de um método herdado de um objeto pai?
QUESTÃO 33 – Na Programação Orientada a Objetos (POO), um padrão de desenvolvimento muito
utilizado, há um conceito que consiste na alteração do funcionamento interno de um método herdado
de um objeto pai. Que conceito é esse?
A) Objeto.
B) Abstração.
C) Encapsulamento.
D) Herança.
E) Polimorfismo.
O conceito descrito na questão é o de Polimorfismo, que é a capacidade de um objeto de assumir diferentes formas ou comportamentos.
Vamos analisar as alternativas:
A) Objeto: Refere-se a uma instância de uma classe na POO. Não está diretamente relacionado à descrição do conceito na questão.
B) Abstração: Refere-se à capacidade de modelar características essenciais de um objeto, abstraindo detalhes menos relevantes. Embora seja um conceito importante na POO, não está diretamente relacionado à alteração do funcionamento interno de métodos herdados.
C) Encapsulamento: Refere-se ao princípio de esconder os detalhes de implementação de uma classe e expor apenas uma interface para interação. Embora seja fundamental na POO, não está diretamente relacionado à descrição na questão.
D) Herança: Refere-se à capacidade de uma classe herdar atributos e métodos de outra classe. Embora a herança esteja envolvida na situação descrita na questão, ela não descreve especificamente a alteração do funcionamento interno de métodos herdados.
E) Polimorfismo: Refere-se à capacidade de um objeto de uma classe derivada fornecer uma implementação específica de um método que é definido em uma classe base ou interface. Isso permite que um método seja chamado de forma uniforme, mas com diferentes comportamentos, dependendo do tipo de objeto que o invoca. Portanto, o polimorfismo corresponde exatamente à descrição fornecida na questão.
Assim, a resposta correta é a letra E) Polimorfismo.
O assunto da questão é um conceito chave na Programação Orientada a Objetos, que permite a flexibilidade e extensibilidade dos programas.


Qual a resposta correta da questão sobre o scrum do concurso de 2017 do hcpa?
Questão 16 - Retirada do CONCURSO PÚBLICO Nº 04/2017 do HOSPITAL DE CLÍNICAS de Porto Alegre RS – da FAURGS para o cargo de ANALISTA DE TI I (Analista de Negócios)
Considere as seguintes afirmações sobre Scrum.
I - Utiliza uma abordagem empírica, aceitando que o problema pode não ser totalmente entendido ou definido na análise e que os requisitos provavelmente mudarão com o tempo.
II - O time Scrum é composto pelos papéis de Product Owner, Scrum Master, Analista de Sistema, Desenvolvedor e Testador.
III- Uma Sprint pode ser cancelada antes do seu time-box terminar. O Product Owner ou o Scrum Master possuem autoridade para cancelar uma Sprint.
IV - A responsabilidade pela arquitetura do produto que está sendo construído é do arquiteto de software.
Quais estão corretas?
(A) Apenas I.
(B) Apenas I e III.
(C) Apenas II e IV.
(D) Apenas I, II e IV.
(E) Apenas II, III e IV.
Qual a alternativa correta de acordo com o gabarito?
A letra (A) apenas a afirmação I está correta. Veja abaixo por que:
I - Scrum utiliza uma abordagem empírica, aceitando que o problema pode não ser totalmente entendido ou definido na análise e que os requisitos provavelmente mudarão com o tempo. Isso é uma das premissas fundamentais do Scrum.
As afirmações II, III e IV estão incorretas.
II - O time Scrum é composto pelos papéis de Product Owner, Scrum Master e Desenvolvedores. O papel de Analista de Sistema e Testador não é um papel oficial no Scrum. Essas atividades podem ser realizadas pelos membros do time, mas não são papéis específicos.
III - Uma Sprint não deve ser cancelada antes do seu time-box terminar, a menos que a meta da Sprint se torne obsoleta ou não viável. O Product Owner ou o Scrum Master não possuem autoridade para cancelar uma Sprint. A decisão de cancelar uma Sprint deve ser tomada pelo time como um todo.
IV - A responsabilidade pela arquitetura do produto que está sendo construído é compartilhada por todos os membros do time, não apenas pelo arquiteto de software. O time como um todo é responsável pela qualidade e pela evolução da arquitetura do produto.
Quais dos assuntos a questão se enquadra?
A questão se enquadra principalmente nos seguintes assuntos:
Métodos ágeis: A questão aborda conceitos relacionados ao framework Scrum, que é um método ágil amplamente utilizado no desenvolvimento de software.
Embora alguns outros assuntos sejam citados na questão como testes de software e analise de sistema na afirmação II eles não são abordados diretamente na questão.
Quais os conhecimentos necessários para responder essas questões?
Para responder corretamente às questões mencionadas, é necessário ter conhecimentos nos seguintes tópicos:
Métodos ágeis: É necessário entender os princípios e práticas dos métodos ágeis, como Scrum, para compreender as afirmações e identificar as informações corretas.
Scrum: É necessário conhecer os papéis, artefatos e eventos do Scrum, bem como as responsabilidades de cada um dos membros do time Scrum.
Gerenciamento de projetos: Ter conhecimentos sobre os fundamentos do gerenciamento de projetos, incluindo o papel do Scrum Master, pode ajudar a identificar as informações corretas relacionadas ao cancelamento de uma Sprint.Qual a dificuldade dessa questão?
A dificuldade dessa questão pode variar dependendo do nível de conhecimento e experiência do indivíduo na área de métodos ágeis, especialmente no Scrum. Para alguém familiarizado com os conceitos básicos do Scrum, a questão pode não ser tão desafiadora, pois envolve a identificação de informações corretas e incorretas sobre o Scrum.
No entanto, para alguém sem conhecimento prévio sobre o Scrum, a questão pode ser mais difícil, pois requer a compreensão dos conceitos, papéis e práticas do Scrum para distinguir as afirmações corretas das incorretas.
Além disso, a questão também abrange outros tópicos, como testes de software e gerenciamento de projetos, o que pode adicionar um grau adicional de dificuldade para aqueles que não estão familiarizados com esses assuntos.
Portanto, a dificuldade dessa questão pode ser considerada moderada a alta, dependendo do nível de conhecimento e experiência do indivíduo na área.
Veja mais em:


Veja abaixo um questão sobre tipos de dados de referência em c#.
QUESTÃO 20 – A linguagem C# fornece um conjunto padrão de tipos internos, divididos em tipos
internos de valor e tipos internos de referência. Isto posto, assinale a alternativa que apresenta
somente tipos internos de referência.
A) dynamic, object e string.
B) bool, double e int.
C) byte, float e object.
D) bool, byte e dynamic.
E) float, int e string.
Assuntos: Linguagem de Programação (C#)
Tipos internos de referência em C#.
Relacionada a Linguagens de Programação: Noções de linguagens orientadas a objetos.


Quais são os protocolos de rede utilizados para acesso remoto a correio eletrônico?
QUESTÃO 36 – São protocolos de rede utilizados para acesso remoto a correio eletrônico:
A) ICPM e SSH.
B) IMAP e POP3.
C) ARP e RARP.
D) SMTP e SNMP.
E) TCP e UDP.
Assunto: Segurança da Informação
Conceitos e práticas de segurança da informação, redes e criptografia.
Relacionada a Segurança da Informação: Criptografia e certificação digital.


Veja abaixo um questão sobre override com java.
QUESTÃO 18 – Analise o trecho de código-fonte abaixo, escrito na linguagem Java:
@Override
public String toString()
{
return String.format("%s %s", lastName, firstName);
}
A anotação @Override indica que esse método:
A) Altera um método nativo da linguagem.
B) Foi documentado automaticamente.
C) Está encapsulado.
D) Herda os métodos e atributos da superclasse.
E) Sobrepõe um método da superclasse.
Assuntos: Programação (Java)
Anotação @Override em métodos.
Relacionada a Linguagens de Programação: Noções de linguagens procedurais.
Resposta: E) Sobrepõe um método da superclasse.
Justificativa: A anotação @Override indica que o método na subclasse está sobrescrevendo um método da superclasse.
Inglês técnico:
Override:
Tradução: sobrepor
Aplicação em java:
Em programação, "override" é um conceito usado em linguagens orientadas a objetos, como Java, para indicar que uma classe está fornecendo uma implementação específica de um método que já está sendo fornecido por uma de suas classes pai (ou interface implementada).
Em Java, quando uma classe estende outra classe (herança), ela pode substituir (ou sobrescrever) um método definido na classe pai, desde que o método na classe pai seja marcado como "método passível de substituição". Para fazer isso, você usa a anotação @Override antes do método na subclasse para indicar explicitamente que você está substituindo um método da classe pai.
Aqui está um exemplo simples em Java:
class Animal {
public void fazerBarulho() {
System.out.println("O animal faz barulho.");
}
}
class Cachorro extends Animal {
@Override
public void fazerBarulho() {
System.out.println("O cachorro late.");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Animal();
animal.fazerBarulho(); // Saída: O animal faz barulho.
Cachorro cachorro = new Cachorro();
cachorro.fazerBarulho(); // Saída: O cachorro late.
}
}
No exemplo acima, a classe Cachorro estende a classe Animal e substitui (sobrescreve) o método fazerBarulho(). Quando você chama fazerBarulho() em uma instância de Cachorro, a implementação específica de Cachorro é chamada, não a implementação em Animal. Isso é o que chamamos de "override" em Java.


Qual padrão separa o display do estado de um objeto a partir do objeto em si e permite que sejam fornecidos displays alternativos e quando o estado do objeto muda, todos os displays são automaticamente notificados e atualizados para refletir a mudança?
QUESTÃO 36 – Em Padrões de Projetos de Software ou Design Patterns, o padrão é uma descrição
de conhecimento e experiência, uma solução já aprovada para um problema comum. Um padrão muito
conhecido separa o display do estado de um objeto a partir do objeto em si e permite que sejam
fornecidos displays alternativos. Quando o estado do objeto muda, todos os displays são
automaticamente notificados e atualizados para refletir a mudança. Qual é o nome desse padrão?
A) Factory Method.
B) Singleton.
C) Decorator.
D) Observer.
E) Facade.
A questão aborda um conceito fundamental em Padrões de Projetos de Software, especificamente o padrão de projeto conhecido como Observer.
Vamos analisar cada alternativa:
A) Factory Method: Este padrão de projeto define uma interface para criar um objeto, mas permite às subclasses escolher o tipo de objeto a ser instanciado. Ele não está relacionado diretamente à descrição fornecida na questão.
B) Singleton: O padrão Singleton garante que uma classe tenha apenas uma instância e fornece um ponto global de acesso a essa instância. Embora seja um padrão de projeto comum, não se relaciona diretamente à descrição na questão.
C) Decorator: O padrão Decorator permite adicionar funcionalidades a um objeto de forma dinâmica. Embora seja útil para modificar o comportamento de um objeto, não está diretamente relacionado à separação do display do estado de um objeto.
D) Observer: Este é o padrão de projeto descrito na questão. O Observer é usado quando existe uma relação de dependência entre objetos, de modo que, quando um objeto muda de estado, todos os seus dependentes (observadores) são notificados e atualizados automaticamente. Isso corresponde exatamente à descrição fornecida na questão.
E) Facade: O padrão Facade fornece uma interface unificada para um conjunto de interfaces em um subsistema. Ele não está diretamente relacionado à descrição na questão.
Portanto, a resposta correta é a letra D) Observer. Este padrão de projeto é amplamente utilizado para implementar a comunicação entre objetos de forma desacoplada e eficiente, permitindo atualizações automáticas quando o estado de um objeto é alterado.


O Que é POO e Para Que Serve?
Crie um artigo bem completo para um público formado por inicientes, leigos, burros e idiotas sobre: Programação Orientada a Objetos: Reforce os conceitos fundamentais de POO (Programação Orientada a Objetos), incluindo encapsulamento, herança, polimorfismo, abstração, e os princípios SOLID. Com exemplos na linguagem php e foco em concurso público
Programação Orientada a Objetos (POO): Guia Completo para Iniciantes
A Programação Orientada a Objetos (POO) é um dos paradigmas mais importantes e amplamente usados no desenvolvimento de software. Se você é um iniciante, leigo ou mesmo alguém que acha esse tema difícil, este guia é para você. Vamos explorar os conceitos fundamentais de POO de forma simples, com exemplos em PHP, uma linguagem popular e acessível. Além disso, faremos isso com um foco em concursos públicos, onde esses conceitos são frequentemente cobrados.
O que é Programação Orientada a Objetos (POO)?
POO é um paradigma de programação que organiza o software em "objetos". Um objeto é uma entidade que combina dados (chamados de atributos ou propriedades) e comportamentos (chamados de métodos ou funções) em uma única unidade.
Conceitos Fundamentais de POO
- Encapsulamento
- Herança
- Polimorfismo
- Abstração
- Princípios SOLID
Vamos explorar cada um desses conceitos com exemplos em PHP.
Encapsulamento
Encapsulamento é a prática de esconder os detalhes internos de um objeto e expor apenas o que é necessário. Isso ajuda a proteger os dados e mantém o código mais organizado.
Exemplo em PHP:
class ContaBancaria {
private $saldo = 0;
public function depositar($quantia) {
$this->saldo += $quantia;
}
public function sacar($quantia) {
if ($quantia <= $this->saldo) {
$this->saldo -= $quantia;
} else {
echo "Saldo insuficiente";
}
}
public function getSaldo() {
return $this->saldo;
}
}
$conta = new ContaBancaria();
$conta->depositar(100);
$conta->sacar(30);
echo $conta->getSaldo(); // 70
Neste exemplo, o saldo da conta é encapsulado e só pode ser alterado através dos métodos depositar
e sacar
.
Herança
Herança é a capacidade de criar novas classes com base em classes existentes. A nova classe (subclasse) herda os atributos e métodos da classe existente (superclasse).
Exemplo em PHP:
class Animal {
protected $nome;
public function __construct($nome) {
$this->nome = $nome;
}
public function falar() {
return "Som de animal";
}
}
class Cachorro extends Animal {
public function falar() {
return "Latido";
}
}
$cachorro = new Cachorro("Rex");
echo $cachorro->falar(); // Latido
Aqui, a classe Cachorro
herda a propriedade nome
e o método falar
da classe Animal
, mas sobrescreve o método falar
para fornecer uma implementação específica.
Polimorfismo
Polimorfismo permite que objetos de diferentes classes sejam tratados como objetos de uma classe comum. Isso é feito geralmente através da herança e de interfaces.
Exemplo em PHP:
class Gato extends Animal {
public function falar() {
return "Miau";
}
}
$animais = [
new Cachorro("Rex"),
new Gato("Mia")
];
foreach ($animais as $animal) {
echo $animal->falar() . "\n";
}
// Latido
// Miau
No exemplo, tanto Cachorro
quanto Gato
são tratados como Animal
e o método falar
é chamado polimorficamente.
Abstração
Abstração é o conceito de esconder a complexidade e mostrar apenas os detalhes essenciais de um objeto. Em PHP, isso é frequentemente feito usando classes abstratas e interfaces.
Exemplo em PHP:
abstract class Forma {
abstract public function calcularArea();
}
class Circulo extends Forma {
private $raio;
public function __construct($raio) {
$this->raio = $raio;
}
public function calcularArea() {
return pi() * pow($this->raio, 2);
}
}
class Retangulo extends Forma {
private $largura;
private $altura;
public function __construct($largura, $altura) {
$this->largura = $largura;
$this->altura = $altura;
}
public function calcularArea() {
return $this->largura * $this->altura;
}
}
$formas = [
new Circulo(5),
new Retangulo(4, 6)
];
foreach ($formas como $forma) {
echo $forma->calcularArea() . "\n";
}
// 78.539816339745
// 24
Neste exemplo, Forma
é uma classe abstrata que define o método calcularArea
, e Circulo
e Retangulo
são classes concretas que implementam esse método.
Princípios SOLID
Os princípios SOLID são um conjunto de diretrizes para escrever código mais limpo e gerenciável. Vamos resumir cada princípio:
Single Responsibility Principle (SRP) - Princípio da Responsabilidade Única: Uma classe deve ter uma única responsabilidade ou motivo para mudar.
Exemplo:
class Relatorio { public function gerarPDF() { // código para gerar PDF } } class EnvioEmail { public function enviar($email) { // código para enviar email } }
Open/Closed Principle (OCP) - Princípio Aberto/Fechado: Classes devem estar abertas para extensão, mas fechadas para modificação.
Exemplo:
interface FormaInterface { public function calcularArea(); } class Triangulo implements FormaInterface { private $base; private $altura; public function __construct($base, $altura) { $this->base = $base; $this->altura = $altura; } public function calcularArea() { return 0.5 * $this->base * $this->altura; } }
Liskov Substitution Principle (LSP) - Princípio da Substituição de Liskov: Subclasses devem ser substituíveis por suas superclasses.
Exemplo:
class Ave { public function voar() { return "Voando"; } } class Pato extends Ave {} class Pinguim extends Ave { public function voar() { throw new Exception("Pinguins não voam"); } }
Neste caso,
Pinguim
não deveria herdar deAve
se não pode voar. Deveria ser reestruturado para manter a substituição válida.Interface Segregation Principle (ISP) - Princípio da Segregação de Interfaces: Muitas interfaces específicas são melhores do que uma interface geral.
Exemplo:
interface AveQueVoa { public function voar(); } interface AveQueNada { public function nadar(); } class Gaivota implements AveQueVoa { public function voar() { return "Gaivota voando"; } } class Pinguim implements AveQueNada { public function nadar() { return "Pinguim nadando"; } }
Dependency Inversion Principle (DIP) - Princípio da Inversão de Dependência: Módulos de alto nível não devem depender de módulos de baixo nível. Ambos devem depender de abstrações.
Exemplo:
interface ServicoEmail { public function enviar($mensagem); } class ServicoEmailSMTP implements ServicoEmail { public function enviar($mensagem) { // lógica de envio via SMTP } } class Notificacao { private $servicoEmail; public function __construct(ServicoEmail $servicoEmail) { $this->servicoEmail = $servicoEmail; } public function enviarNotificacao($mensagem) { $this->servicoEmail.enviar($mensagem); } } $servicoEmail = new ServicoEmailSMTP(); $notificacao = new Notificacao($servicoEmail);
Já sabe tudo sobre POO?
A Programação Orientada a Objetos é um pilar fundamental na programação moderna. Entender seus conceitos básicos como encapsulamento, herança, polimorfismo e abstração, bem como os princípios SOLID, é essencial para qualquer desenvolvedor. Esperamos que este guia tenha esclarecido esses conceitos de forma simples e prática. Boa sorte nos seus estudos e em seus concursos públicos!
Programação orientada a objetos ainda é o paradigma mais usado em programação?
Sim, a Programação Orientada a Objetos (POO) continua sendo um dos paradigmas mais utilizados em programação. Vários fatores contribuem para a popularidade contínua da POO:
Legado de Software e Linguagens Populares: Muitas das linguagens de programação mais populares, como Java, C++, C#, e Python, suportam ou são fortemente baseadas em POO. Isso significa que uma vasta quantidade de software existente foi escrito usando POO, e os desenvolvedores precisam continuar a usar esse paradigma para manter e expandir esses sistemas.
Modelagem Natural do Mundo Real: POO permite que os desenvolvedores modelem objetos do mundo real de maneira intuitiva. Classes e objetos podem representar entidades do mundo real com propriedades (atributos) e comportamentos (métodos), facilitando a compreensão e o design do software.
Reuso de Código e Manutenção: A herança e a composição permitem o reuso eficiente de código, enquanto o encapsulamento ajuda a proteger os dados e facilita a manutenção e a atualização do software. Esses recursos são especialmente importantes em projetos de grande escala e de longa duração.
Frameworks e Bibliotecas: Muitos frameworks e bibliotecas populares, especialmente no desenvolvimento web e de aplicativos móveis, são baseados em POO. Exemplos incluem frameworks como Spring (Java), .NET (C#), Django (Python), e Ruby on Rails (Ruby).
Suporte a Boas Práticas de Engenharia de Software: A POO suporta e incentiva boas práticas de engenharia de software, como o uso dos princípios SOLID, que ajudam a criar software mais robusto, flexível e fácil de manter.
Outros Paradigmas em Uso
Embora a POO seja amplamente utilizada, outros paradigmas de programação também são importantes e, em alguns casos, estão ganhando popularidade:
Programação Funcional (PF): Paradigmas funcionais, como os encontrados em Haskell, Scala, e F#, têm ganhado tração devido à sua capacidade de lidar com a concorrência e evitar efeitos colaterais, o que facilita a criação de software mais seguro e previsível.
Programação Reativa: Paradigmas reativos, que focam na programação baseada em fluxos de dados e propagação de mudanças, são populares em aplicações que lidam com eventos e streams de dados contínuos. Bibliotecas como RxJS (JavaScript) e frameworks como Akka (Scala) são exemplos.
Programação Orientada a Aspectos (POA): Embora menos comum, a POA é usada para separar preocupações transversais (como logging e segurança) do código de negócios principal, melhorando a modularidade.
Programação Declarativa: Usada em linguagens como SQL e em frameworks de front-end como React (com JSX), onde o foco está em descrever o que deve ser feito, em vez de como fazê-lo.
Em resumo, enquanto a POO continua sendo um paradigma dominante e amplamente utilizado devido às suas vantagens e ao suporte robusto nas principais linguagens de programação e frameworks, é importante estar ciente de outros paradigmas e suas vantagens em diferentes contextos. A escolha do paradigma adequado pode depender do tipo de problema que você está tentando resolver, da equipe de desenvolvimento e das ferramentas disponíveis.
Qual o melhor paradigma de programação?
Não existe um "melhor" paradigma de programação universal, pois a escolha do paradigma depende do contexto do projeto, da natureza do problema a ser resolvido, das preferências e habilidades da equipe de desenvolvimento, e das características específicas das linguagens e ferramentas disponíveis. Cada paradigma tem seus próprios pontos fortes e fraquezas. Vamos analisar alguns dos principais paradigmas e suas características:
Programação Orientada a Objetos (POO)
Vantagens:
- Modelagem Natural: Facilita a modelagem de problemas do mundo real usando objetos.
- Encapsulamento: Protege os dados e promove modularidade.
- Reuso de Código: A herança e a composição permitem reusar código de forma eficiente.
- Manutenção e Escalabilidade: Facilita a manutenção e a escalabilidade de grandes sistemas.
Desvantagens:
- Complexidade: Pode levar a uma arquitetura complexa com muitas classes e objetos.
- Sobrecarga de Memória: Objetos podem consumir mais memória devido ao overhead associado.
Programação Funcional (PF)
Vantagens:
- Imutabilidade: Reduz efeitos colaterais e torna o código mais previsível.
- Concorrência: Facilita o desenvolvimento de programas concorrentes e paralelos.
- Funções de Alta Ordem: Promove a composição de funções e reuso de código.
Desvantagens:
- Curva de Aprendizado: Pode ser mais difícil para programadores acostumados com POO.
- Menos Intuitivo: Abordagens puramente funcionais podem ser menos intuitivas para modelar certos tipos de problemas.
Programação Procedural
Vantagens:
- Simplicidade: É direta e fácil de entender, especialmente para pequenos scripts e programas simples.
- Desempenho: Pode ser mais eficiente em termos de desempenho devido à ausência de overhead de objetos.
Desvantagens:
- Escalabilidade: Pode se tornar difícil de manter e escalar em projetos maiores.
- Modularidade: Menos suporte para modularidade e encapsulamento em comparação com POO.
Programação Reativa
Vantagens:
- Responsividade: Ideal para sistemas que precisam reagir a eventos em tempo real.
- Escalabilidade: Facilita a criação de sistemas escaláveis e responsivos.
Desvantagens:
- Complexidade: Pode ser complexa para implementar e entender, especialmente para novatos.
- Ferramentas e Bibliotecas: Dependência de frameworks específicos e bibliotecas reativas.
Programação Orientada a Aspectos (POA)
Vantagens:
- Separação de Preocupações: Permite separar aspectos transversais (como logging, segurança) do código de negócios principal.
- Manutenção: Facilita a manutenção e a evolução do código ao centralizar preocupações transversais.
Desvantagens:
- Curva de Aprendizado: Pode ser difícil de aprender e aplicar corretamente.
- Ferramentas e Suporte: Menos suporte em linguagens mainstream comparado a POO e PF.
Programação Declarativa
Vantagens:
- Legibilidade: Código é mais legível e fácil de entender, focando no o que fazer ao invés de como fazer.
- Menor Suscetibilidade a Erros: Reduz a possibilidade de erros comuns em programação imperativa.
Desvantagens:
- Flexibilidade: Pode ser menos flexível para certos tipos de problemas onde a programação imperativa é mais adequada.
- Curva de Aprendizado: Pode ser menos intuitiva para aqueles acostumados com paradigmas imperativos.
Qual o melhor paradigma de programação para o seu projeto?
A escolha do melhor paradigma de programação depende do contexto específico do seu projeto:
- POO é excelente para modelar sistemas complexos e orientados a objetos do mundo real.
- PF é ideal para aplicações que exigem alta concorrência e imutabilidade.
- Programação Procedural é simples e direta, ótima para pequenos scripts e programas.
- Programação Reativa é perfeita para sistemas reativos e de tempo real.
- POA é útil para gerenciar preocupações transversais em projetos grandes.
- Programação Declarativa oferece legibilidade e simplicidade em muitos casos, especialmente em consultas e interfaces de usuário.
A melhor abordagem é muitas vezes uma combinação de paradigmas, escolhendo o mais adequado para cada parte do projeto.
Qual paradigma de programação é mais otimizado, que usa menos código, aproveitando melhor o que jâ existe e consumindo menos processamento?
Determinar o paradigma de programação "mais otimizado" depende de vários fatores, incluindo a definição específica de "otimização" e o contexto em que o software está sendo desenvolvido e executado. Vamos explorar como diferentes paradigmas se encaixam nesses critérios:
1. Menos Código
Programação Funcional (PF)
A programação funcional (PF) pode levar a um código mais conciso, especialmente ao lidar com transformações de dados e operações sobre coleções. Funções de alta ordem, imutabilidade e a capacidade de compor funções podem reduzir significativamente a quantidade de código necessário.
Exemplo em JavaScript:
const numeros = [1, 2, 3, 4];
const dobrados = numeros.map(x => x * 2); // [2, 4, 6, 8]
Programação Declarativa
Paradigmas declarativos, como SQL para consultas de banco de dados ou JSX/React para interfaces de usuário, geralmente permitem expressar operações complexas de forma muito concisa.
Exemplo em SQL:
SELECT nome FROM usuarios WHERE idade > 18;
2. Reaproveitamento de Código
Programação Orientada a Objetos (POO)
A POO facilita o reaproveitamento de código através de herança e composição. Bibliotecas e frameworks orientados a objetos podem fornecer uma estrutura robusta que permite a reutilização de componentes de forma eficaz.
Exemplo em PHP:
class Animal {
protected $nome;
public function __construct($nome) {
$this->nome = $nome;
}
}
class Cachorro extends Animal {
public function latir() {
return "Au au";
}
}
3. Consumo de Processamento
Programação Procedural
Programação procedural, como em C, pode ser muito eficiente em termos de consumo de processamento. Sem a sobrecarga de abstrações como objetos, a execução tende a ser mais direta e rápida.
Exemplo em C:
#include <stdio.h>
void soma(int a, int b) {
printf("%d\n", a + b);
}
int main() {
soma(2, 3);
return 0;
}
Programação Funcional
Programação funcional pura pode ser menos eficiente em termos de processamento devido ao uso extensivo de imutabilidade e criação de novos objetos em vez de modificar os existentes. No entanto, linguagens funcionais modernas e otimizadas (como Haskell) e o uso de técnicas como memoização podem mitigar esses problemas.
Paradigmas Específicos e Ferramentas
JIT Compilation (Just-In-Time): Linguagens como JavaScript (Node.js) e Java utilizam compilação JIT para otimizar a execução de código em tempo de execução, tornando paradigmas como POO e PF mais eficientes.
Frameworks e Bibliotecas: O uso de frameworks eficientes pode melhorar o desempenho independente do paradigma. Por exemplo, frameworks reativos como RxJS podem otimizar a programação reativa, enquanto frameworks como Django (Python) e Spring (Java) otimizam o uso de POO.
Então qual o mais otimizado?
Não há uma resposta única para qual paradigma é mais otimizado, pois depende do contexto específico:
- Menos Código: Paradigmas funcionais e declarativos tendem a ser mais concisos.
- Reaproveitamento de Código: POO facilita o reaproveitamento através de herança e composição.
- Consumo de Processamento: Paradigmas procedurais podem ser mais eficientes em termos de processamento bruto.
Para obter o melhor desempenho e eficiência, muitas vezes é benéfico combinar diferentes paradigmas de acordo com as necessidades específicas do projeto. Por exemplo, pode-se usar programação funcional para manipulação de dados, POO para estrutura geral do sistema, e programação procedural para otimizações críticas de desempenho.
Qual a relação, diferenças e semelhanças entre POO e MVC?
Relação entre POO e MVC
Programação Orientada a Objetos (POO) e Model-View-Controller (MVC) são conceitos diferentes que frequentemente se complementam no desenvolvimento de software. A POO é um paradigma de programação, enquanto MVC é um padrão de design arquitetural.
POO (Programação Orientada a Objetos)
- Paradigma de Programação: POO organiza o software em objetos que encapsulam dados e comportamentos.
- Conceitos Fundamentais: Encapsulamento, herança, polimorfismo e abstração.
- Objetivo: Promover a reutilização de código, modularidade, manutenção e escalabilidade.
MVC (Model-View-Controller)
- Padrão de Design Arquitetural: MVC organiza a aplicação em três componentes principais: Model, View e Controller.
- Objetivo: Separar a lógica de negócios, a interface do usuário e o controle de entrada para facilitar a manutenção e o desenvolvimento colaborativo.
Componentes do MVC
Model:
- Representa a lógica de negócios e os dados da aplicação.
- Encapsula o comportamento relacionado aos dados, como manipulação e validação.
- Pode ser implementado utilizando conceitos de POO.
View:
- Responsável pela apresentação dos dados ao usuário.
- Atualiza a interface do usuário em resposta às mudanças no Model.
- Pode ser uma classe ou conjunto de classes que utilizam POO para gerenciar a interface do usuário.
Controller:
- Atua como um intermediário entre o Model e a View.
- Processa a entrada do usuário, invoca métodos do Model, e seleciona a View apropriada para exibir a resposta.
- Tipicamente implementado como classes orientadas a objetos.
Diferenças e Semelhanças
Diferenças
Natureza:
- POO: Paradigma de programação.
- MVC: Padrão de design arquitetural.
Foco:
- POO: Estrutura interna de objetos, modularidade, e reutilização de código.
- MVC: Separação de preocupações (lógica de negócios, interface do usuário e controle de entrada).
Semelhanças
Modularidade:
- Ambos promovem a modularidade. POO faz isso através de objetos e classes, enquanto MVC separa a aplicação em componentes distintos (Model, View e Controller).
Manutenção e Extensibilidade:
- Ambos facilitam a manutenção e extensibilidade do software. POO permite isso através de herança e composição, enquanto MVC facilita isso através da separação de responsabilidades.
Reutilização de Código:
- POO promove a reutilização de código através de classes e objetos reutilizáveis. MVC permite reutilização ao separar a lógica de negócios da apresentação e controle.
Exemplo em PHP utilizando POO e MVC
Vamos ver um exemplo simples de uma aplicação PHP que utiliza ambos os conceitos:
Model:
class Usuario {
private $nome;
private $email;
public function __construct($nome, $email) {
$this->nome = $nome;
$this->email = $email;
}
public function getNome() {
return $this->nome;
}
public function getEmail() {
return $this->email;
}
}
View:
class UsuarioView {
public function exibirUsuario($usuario) {
echo "Nome: " . $usuario->getNome() . "<br>";
echo "Email: " . $usuario->getEmail() . "<br>";
}
}
Controller:
class UsuarioController {
private $model;
private $view;
public function __construct($model, $view) {
$this->model = $model;
$this->view = $view;
}
public function exibirUsuario() {
$this->view->exibirUsuario($this->model);
}
}
// Uso
$model = new Usuario("João", "joao@example.com");
$view = new UsuarioView();
$controller = new UsuarioController($model, $view);
$controller->exibirUsuario();
POO e MVC
São conceitos que se complementam e são frequentemente usados juntos no desenvolvimento de software. Enquanto a POO fornece a base para a estruturação interna do código através de objetos e classes, o MVC organiza a aplicação em componentes distintos para separar as responsabilidades, facilitando a manutenção e o desenvolvimento. Usando ambos os conceitos em conjunto, os desenvolvedores podem criar aplicações bem estruturadas, modulares e fáceis de manter.
O que são classes, objetos, herança, polimorfismo e encapsulamento?
Vamos explorar os conceitos fundamentais da Programação Orientada a Objetos (POO): classes, objetos, herança, polimorfismo e encapsulamento, com exemplos em PHP.
Classes
Definição: Classes são moldes ou estruturas que definem propriedades (atributos) e comportamentos (métodos) que os objetos criados a partir delas terão.
Exemplo em PHP:
class Carro {
public $cor;
public $modelo;
public function __construct($cor, $modelo) {
$this->cor = $cor;
$this->modelo = $modelo;
}
public function dirigir() {
return "O carro está dirigindo";
}
}
Objetos
Definição: Objetos são instâncias de classes. Cada objeto pode ter valores diferentes para os atributos definidos na classe.
Exemplo em PHP:
$meuCarro = new Carro("vermelho", "Fusca");
echo $meuCarro->dirigir(); // Saída: O carro está dirigindo
Herança
Definição: Herança permite que uma classe (classe filha) herde atributos e métodos de outra classe (classe pai). Isso promove a reutilização de código.
Exemplo em PHP:
class Veiculo {
public $marca;
public function buzinar() {
return "Buzinando!";
}
}
class Carro extends Veiculo {
public $cor;
public $modelo;
public function __construct($marca, $cor, $modelo) {
$this->marca = $marca;
$this->cor = $cor;
$this->modelo = $modelo;
}
public function dirigir() {
return "O carro está dirigindo";
}
}
$meuCarro = new Carro("Volkswagen", "vermelho", "Fusca");
echo $meuCarro->buzinar(); // Saída: Buzinando!
Polimorfismo
Definição: Polimorfismo permite que métodos em diferentes classes sejam chamados pelo mesmo nome, mas comportem-se de maneira diferente. Isso é alcançado através da sobrecarga de métodos ou da implementação de interfaces.
Exemplo em PHP:
class Animal {
public function fazerSom() {
return "Algum som";
}
}
class Cachorro extends Animal {
public function fazerSom() {
return "Latido";
}
}
class Gato extends Animal {
public function fazerSom() {
return "Miau";
}
}
$animais = [new Cachorro(), new Gato()];
foreach ($animais as $animal) {
echo $animal->fazerSom() . "<br>";
}
// Saída:
// Latido
// Miau
Encapsulamento
Definição: Encapsulamento esconde os detalhes internos de um objeto e só expõe os métodos necessários para interagir com ele. Isso protege os dados e mantém a integridade do objeto.
Exemplo em PHP:
class ContaBancaria {
private $saldo;
public function __construct($saldoInicial) {
$this->saldo = $saldoInicial;
}
public function depositar($quantia) {
$this->saldo += $quantia;
}
public function sacar($quantia) {
if ($quantia <= $saldo) {
$this->saldo -= $quantia;
} else {
echo "Saldo insuficiente";
}
}
public function getSaldo() {
return $this->saldo;
}
}
$minhaConta = new
Leia mais sobre: poo para iniciantes e concurseiros


Qual linguagem é usada pelo DBA e pelos projetistas de banco de dados para definir ambos os esquemas?
QUESTÃO 48 – Os SGBDs (Sistemas de Gerenciamento de Banco de Dados) ou DBMSs (Database
Management Systems) são ferramentas fundamentais para o armazenamento, organização e
recuperação eficiente de informações em aplicações de software. O primeiro passo é especificar
esquemas conceituais e internos para o banco de dados e quaisquer mapeamentos entre os dois.
Quando nenhuma separação estrita de níveis é mantida, uma linguagem é usada pelo DBA e pelos
projetistas de banco de dados para definir ambos os esquemas. A linguagem mencionada é a
Linguagem de:
A) definição de dados (DDL).
B) definição de visualização (VDL).
C) consulta estruturada (SQL).
D) manipulação de dados (DML).
E) definição de armazenamento (SDL).
Vamos analisar cada alternativa:
A) Definição de dados (DDL): A DDL (Data Definition Language) é uma linguagem usada para definir a estrutura e o esquema de um banco de dados. Com a DDL, é possível criar, alterar e excluir objetos de banco de dados, como tabelas, índices e restrições. Portanto, a DDL é a linguagem apropriada para especificar esquemas conceituais e internos para o banco de dados.
B) Definição de visualização (VDL): A VDL não é uma linguagem reconhecida em bancos de dados. A definição de visualizações geralmente é feita usando DDL ou ferramentas de modelagem de dados.
C) Consulta estruturada (SQL): A SQL (Structured Query Language) é uma linguagem utilizada para consultar e manipular dados em bancos de dados relacionais. Embora seja amplamente usada em bancos de dados, não é apropriada para definir esquemas conceituais e internos.
D) Manipulação de dados (DML): A DML (Data Manipulation Language) é uma linguagem usada para inserir, atualizar e excluir dados em um banco de dados. Não é apropriada para definir a estrutura e o esquema do banco de dados.
E) Definição de armazenamento (SDL): A SDL (Storage Definition Language) não é uma linguagem reconhecida em bancos de dados. A definição de armazenamento geralmente é tratada internamente pelos SGBDs e não é especificada diretamente pelos usuários ou administradores.
Portanto, a resposta correta é a letra A) Definição de dados (DDL). Esta é a linguagem usada para definir esquemas conceituais e internos para o banco de dados, bem como quaisquer mapeamentos entre os dois.


Quais os sistemas de arquivos usados no ubuntu 20 e windows 10?
QUESTÃO 43 – Relacione a Coluna 1 à Coluna 2, associando os sistemas operacionais com os
respectivos sistemas de arquivos que podem ser utilizados.
Coluna 1
1. Linux Ubuntu 20.
2. Microsoft Windows 10.
Coluna 2
( ) NTFS.
( ) FAT32.
( ) EXT4.
A ordem correta de preenchimento dos parênteses, de cima para baixo, é:
A) 1 – 1 – 2.
B) 1 – 2 – 1.
C) 1 – 2 – 2.
D) 2 – 1 – 1.
E) 2 – 2 – 1.
Linux Ubuntu 20: O sistema de arquivos padrão para sistemas Linux, incluindo o Ubuntu 20, é o EXT4. Portanto, a associação correta para o Linux Ubuntu 20 seria o sistema de arquivos EXT4.
Microsoft Windows 10: O Windows 10 suporta vários sistemas de arquivos, mas o sistema de arquivos padrão para a maioria das instalações é o NTFS (New Technology File System). Embora o FAT32 também seja suportado pelo Windows 10, ele é menos comumente usado em instalações modernas.
Portanto, a associação correta seria:
Microsoft Windows 10 - FAT32
Microsoft Windows 10 - NTFS
Linux Ubuntu 20 - EXT4
Com base nisso, vamos analisar as opções de resposta:
A) 1 – 1 – 2: Esta opção associa o Linux Ubuntu 20 ao sistema de arquivos EXT4 e o Microsoft Windows 10 ao sistema de arquivos NTFS. Essa associação está correta, mas não menciona o sistema de arquivos FAT32, que é suportado pelo Windows 10. Portanto, esta opção está incorreta.
B) 1 – 2 – 1: Esta opção associa o Linux Ubuntu 20 ao sistema de arquivos EXT4 e o Microsoft Windows 10 ao sistema de arquivos NTFS. No entanto, inverte a associação de números, colocando o sistema de arquivos NTFS antes do FAT32, o que está incorreto. Além disso, não inclui o sistema de arquivos FAT32. Portanto, esta opção está incorreta.
C) 1 – 2 – 2: Esta opção associa o Linux Ubuntu 20 ao sistema de arquivos EXT4 e o Microsoft Windows 10 aos sistemas de arquivos NTFS e FAT32. No entanto, não está correto associar o Windows 10 a ambos os sistemas de arquivos. Portanto, esta opção está incorreta.
D) 2 – 1 – 1: Esta opção associa o Microsoft Windows 10 ao sistema de arquivos EXT4, o que está incorreto, pois o Windows 10 não utiliza o sistema de arquivos EXT4 como padrão. Portanto, esta opção está incorreta.
Portanto, após a análise, todas as outras opções estão incorretas em relação à associação correta dos sistemas operacionais com os sistemas de arquivos. A opção E) 2 – 2 – 1 é a única correta, pois associa corretamente o Microsoft Windows 10 aos sistemas de arquivos FAT32 e NTFS, e o Linux Ubuntu 20 ao sistema de arquivos EXT4.


Qual camada está presente tanto no modelo OSI quanto no modelo TCP/IP?
QUESTÃO 35 – OSI e TCP/IP são modelos de referência de arquiteturas de rede. A camada
_________ está presente em ambos os modelos.
Assinale a alternativa que preenche corretamente a lacuna do trecho acima.
A) de transporte
B) de apresentação
C) de sessão
D) de segurança
E) física
Resposta: A) de transporte
Justificativa: A camada de transporte está presente tanto no modelo OSI quanto no modelo TCP/IP.
Relacionadas a Redes de Computadores: Arquitetura e protocolos de redes de comunicação.


O que o UML fornece?
QUESTÃO 37 – A Linguagem de Modelagem Unificada (UML – Unified Modeling Laguage) define
notação e metamodelo, tem sua estrutura definida em nível abstrato e é estendida usando princípios
de orientação a objetos para definir uma superestrutura UML. Pode-se afirmar que essa linguagem
fornece:
A) Ferramentas para análise, projeto e implementação de softwares, assim como modelagem de
negócios e processos para o desenvolvimento orientado a objetos.
B) Apoio para desenhar digramas exclusivos para o processo de desenvolvimento em cascata.
C) Base de conhecimento para apoiar na implementação de software, modelando alguns processos
para levantamento de requisitos.
D) Processos para modelagem de sistemas e análise, excluindo negócios, pois trata-se de uma
linguagem técnica de desenvolvimento.
E) Estruturas prontas para desenhar classe e apoiar os analistas nas modelagens de negócios para
processos de desenvolvimento orientado a aspectos.
A questão aborda a definição e o propósito da Linguagem de Modelagem Unificada (UML - Unified Modeling Language).
Vamos analisar cada alternativa:
A) Ferramentas para análise, projeto e implementação de softwares, assim como modelagem de negócios e processos para o desenvolvimento orientado a objetos.
A UML é uma linguagem gráfica padronizada utilizada para visualizar, especificar, construir e documentar sistemas de software. Ela fornece uma variedade de diagramas que auxiliam na análise, projeto e implementação de sistemas de software, bem como na modelagem de negócios e processos. Portanto, esta alternativa está correta.
B) Apoio para desenhar diagramas exclusivos para o processo de desenvolvimento em cascata.
A UML não está restrita ao processo de desenvolvimento em cascata. Ela é flexível e pode ser aplicada a diferentes metodologias de desenvolvimento de software.
C) Base de conhecimento para apoiar na implementação de software, modelando alguns processos para levantamento de requisitos.
A UML não é apenas uma ferramenta para modelar processos de levantamento de requisitos, mas também é usada em todas as fases do ciclo de vida do desenvolvimento de software, desde a concepção até a implementação.
D) Processos para modelagem de sistemas e análise, excluindo negócios, pois trata-se de uma linguagem técnica de desenvolvimento.
A UML pode ser aplicada tanto a sistemas de software quanto a processos de negócios, e não é exclusivamente uma linguagem técnica de desenvolvimento.
E) Estruturas prontas para desenhar classe e apoiar os analistas nas modelagens de negócios para processos de desenvolvimento orientado a aspectos.
Embora a UML possa ser usada para desenhar classes e apoiar modelagens de negócios, ela não está limitada ao desenvolvimento orientado a aspectos.
Portanto, a resposta correta é a letra A) Ferramentas para análise, projeto e implementação de softwares, assim como modelagem de negócios e processos para o desenvolvimento orientado a objetos. A UML é uma linguagem versátil que pode ser aplicada em uma variedade de contextos dentro do desenvolvimento de software e modelagem de negócios.


O que é uma retrospectiva Scrum?
QUESTÃO 22 – Segundo “O Guia do Scrum”, versão 2020, em português, disponível no site
https://scrumguides.org, a Sprint __________ conclui uma Sprint.
Assinale a alternativa que preenche corretamente a lacuna do trecho acima.
A) Planning
B) Review
C) Retrospective
D) Backlog
E) Final
Assunto: Metodologia Ágil (Scrum)
Conclusão de uma Sprint no Scrum.
Resposta: C) Retrospective
Justificativa: De acordo com o Guia do Scrum, uma Sprint conclui com uma reunião de Retrospective.


Qual e alternativa correta da questão sobre teste de software e por quê?
questão 18
Qual e alternativa correta da questão abaixo e por quê?
Com relação a testes de software, considere as afirmações a seguir.
I - O teste de caixa preta testa todas as entradas e saídas desejadas.
II - O teste de caixa branca testa o código da aplicação.
III- O teste de unidade testa em nível de componente ou classe.
IV - No teste de regressão, inserindo-se nova característica na aplicação, toda a aplicação é testada.
V - O teste de interface verifica a navegabilidade e a conformidade dos objetos da tela com padrões.
Quais estão corretas?
(A) Apenas IV e V.
(B) Apenas I, II e III.
(C) Apenas I, III e V.
(D) Apenas II, IV e V.
(E) I, II, III, IV e V.
de acordo com o gabarito a resposta correta é E
Isso significa que as cinco afirmações mencionadas na questão são verdadeiras:
I - O teste de caixa preta testa todas as entradas e saídas desejadas.
II - O teste de caixa branca testa o código da aplicação.
III - O teste de unidade testa em nível de componente ou classe.
IV - No teste de regressão, inserindo-se nova característica na aplicação, toda a aplicação é testada.
V - O teste de interface verifica a navegabilidade e a conformidade dos objetos da tela com padrões.
Portanto, a resposta correta é a alternativa E) I, II, III, IV e V.
Por que as alternativas estão corretas?
Peço desculpas novamente pelo equívoco. Vamos analisar as afirmações novamente para entender por que elas estão corretas ou incorretas:
I - O teste de caixa preta testa todas as entradas e saídas desejadas.
Esta afirmação está incorreta. O teste de caixa preta não testa necessariamente todas as entradas e saídas desejadas, mas sim o comportamento do sistema com base em suas especificações, sem considerar a estrutura interna do software.
II - O teste de caixa branca testa o código da aplicação.
Esta afirmação está incorreta. O teste de caixa branca (ou teste estrutural) envolve a análise do código-fonte do software e é utilizado para verificar se todas as partes do código foram testadas de forma adequada.
III - O teste de unidade testa em nível de componente ou classe.
Esta afirmação está correta. O teste de unidade é realizado em um nível de componente ou classe específico, onde cada unidade individual do software é testada de forma isolada.
IV - No teste de regressão, inserindo-se nova característica na aplicação, toda a aplicação é testada.
Esta afirmação está correta. O teste de regressão envolve a execução de testes para garantir que a introdução de uma nova característica ou correção não tenha afetado negativamente as funcionalidades existentes.
V - O teste de interface verifica a navegabilidade e a conformidade dos objetos da tela com padrões.
Esta afirmação está correta. O teste de interface concentra-se na verificação da navegabilidade e conformidade dos objetos da tela, como botões, menus e campos de entrada, de acordo com os padrões definidos.
Com base nessa análise, é possível concluir que as alternativas corretas são: III - O teste de unidade testa em nível de componente ou classe, IV - No teste de regressão, inserindo-se nova característica na aplicação, toda a aplicação é testada, e V - O teste de interface verifica a navegabilidade e a conformidade dos objetos da tela com padrões.
Portanto, a resposta correta é a alternativa (C) Apenas I, III e V. Lamento pela informação incorreta anteriormente.
quais dos assuntos a questão se enquadra?
A questão se enquadra no assunto de "Testes de software". Os outros assuntos listados não estão diretamente relacionados à temática da questão, que aborda diferentes tipos de testes de software, como teste de caixa preta, teste de caixa branca, teste de unidade, teste de regressão e teste de interface.
qual o conhecimento necessário para responder essa questão?
Para responder corretamente à questão, é necessário ter conhecimento sobre os diferentes tipos de testes de software e suas características. É preciso compreender o que é teste de caixa preta, teste de caixa branca, teste de unidade, teste de regressão e teste de interface, além de conhecer as definições e objetivos de cada um deles.
Também é importante compreender os conceitos básicos relacionados a testes de software, como a diferença entre testes de caixa preta e caixa branca, o nível de granularidade do teste de unidade, o propósito do teste de regressão e os objetivos do teste de interface.
O conhecimento sobre testes de software geralmente é adquirido em cursos de engenharia de software, ciência da computação ou áreas relacionadas, onde são abordados os conceitos, metodologias e técnicas de teste. Também é possível adquirir conhecimento por meio de livros, tutoriais online, documentação de frameworks de teste, entre outros recursos educacionais.
Portanto, para responder corretamente à questão, é necessário ter conhecimento teórico e prático sobre testes de software, com ênfase nos diferentes tipos de testes mencionados na questão.
qual a dificuldade dessa questão?
A dificuldade dessa questão pode variar dependendo do nível de conhecimento e familiaridade do indivíduo com testes de software. Para alguém com conhecimento prévio e experiência em testes de software, essa questão pode ser considerada de dificuldade moderada a fácil, pois envolve conceitos básicos sobre os tipos de testes e suas características.
No entanto, para alguém sem conhecimento prévio ou com pouca experiência em testes de software, a questão pode apresentar um nível de dificuldade maior. Isso porque requer o entendimento e a distinção entre os diferentes tipos de testes de software mencionados, assim como suas definições e objetivos específicos.
Além disso, a presença de alternativas incorretas pode adicionar um desafio adicional ao responder a questão, exigindo uma leitura cuidadosa e análise crítica das afirmações apresentadas.
Em resumo, a dificuldade dessa questão pode ser considerada moderada para aqueles com conhecimento prévio em testes de software, enquanto para os indivíduos menos familiarizados com o tema, a dificuldade pode ser considerada maior.


Qual e alternativa correta da questão sobre testes de software e por quê?
questão 19
Qual e alternativa correta da questão abaixo e por quê?
Considere os axiomas do processo de testes e assinale as afirmações abaixo com V (verdadeiro) ou F (falso).
( ) É possível testar um programa completamente.
( ) Teste de software é um exercício baseado em risco.
( ) Quanto mais bugs são encontrados, menos bugs existirão.
( ) Nem todos os bugs encontrados serão consertados.
A sequência correta de preenchimento dos parênteses, de cima para baixo, é
(A) V – V – V – V.
(B) F – F – F – F.
(C) F – V – F – V.
(D) V – F – V – F.
(E) V – V – F – F.
A sequência correta de preenchimento dos parênteses, de cima para baixo, é a alternativa (C) F – V – F – V.
Vamos analisar cada afirmação individualmente:
( ) É possível testar um programa completamente.
Esta afirmação é falsa. É praticamente impossível testar um programa completamente, pois um programa pode ter uma infinidade de caminhos de execução e combinações de entrada, tornando inviável testar todas as possibilidades.
( ) Teste de software é um exercício baseado em risco.
Esta afirmação é verdadeira. O teste de software é um exercício baseado em risco, pois tem como objetivo identificar e reduzir os riscos associados aos defeitos e falhas do software.
( ) Quanto mais bugs são encontrados, menos bugs existirão.
Esta afirmação é falsa. A presença de bugs não implica que existam menos bugs. Encontrar bugs durante o processo de teste é uma indicação de que o software contém problemas, mas não é possível afirmar quantos bugs ainda estão presentes no sistema.
( ) Nem todos os bugs encontrados serão consertados.
Esta afirmação é verdadeira. Nem todos os bugs encontrados durante o processo de teste serão corrigidos. Os desenvolvedores podem decidir não corrigir certos bugs, especialmente se eles forem considerados de baixa prioridade ou se houver restrições de tempo ou recursos.
Portanto, a sequência correta é (C) F – V – F – V.
quais dos assuntos a questão se enquadra?
A questão se enquadra no assunto "Testes de software". Essa questão aborda conceitos relacionados aos processos de teste de software, como a natureza incompleta dos testes, a abordagem baseada em riscos e a possibilidade de não correção de todos os bugs encontrados durante o processo de teste.
qual o conhecimento necessário para responder essa questão?
Para responder essa questão, é necessário ter conhecimentos sobre testes de software. Isso inclui compreender os conceitos básicos relacionados a testes, como os objetivos dos testes, os desafios envolvidos na realização de testes completos, a abordagem baseada em riscos no teste de software e a natureza do processo de correção de bugs encontrados durante os testes.
Além disso, é importante ter conhecimento sobre os princípios gerais do desenvolvimento de software e dos processos de teste, bem como estar familiarizado com os termos e definições utilizados nesse contexto.
Conhecimentos específicos sobre outros assuntos listados, como modelagem de processos, levantamento de requisitos, métodos ágeis e orientação a objetos, não são essenciais para responder essa questão em particular.
qual a dificuldade dessa questão?
A dificuldade dessa questão pode variar dependendo do conhecimento e familiaridade do indivíduo com o assunto de testes de software. Para alguém com experiência e conhecimento sólidos nessa área, a questão pode ser considerada de nível fácil a moderado.
No entanto, para aqueles com pouca ou nenhuma experiência em testes de software, a questão pode ser mais desafiadora. É necessário compreender os conceitos básicos do processo de teste, como a impossibilidade de testar um programa completamente, o foco no gerenciamento de riscos, a natureza dos bugs encontrados e a decisão de corrigi-los.
Portanto, a dificuldade dessa questão pode ser considerada moderada para aqueles que possuem conhecimentos prévios em testes de software e mais alta para aqueles que não estão familiarizados com o assunto.


Quem deve participar das daily do scrum?
questão 17
Qual e alternativa correta da questão abaixo e por quê?
A reunião diária é uma das cerimônias mais importantes do
Scrum, pois melhora a comunicação e o engaja-
mento dos envolvidos, corrige os rumos, mitiga os
riscos e ainda proporciona o uso dos três pilares doScrum, que são a inspeção (do progresso), a adaptação
(ajustes e impedimentos) diária e a transparência
(todos sabem o que está acontecendo). Assinale a alter-
nativa que apresenta, de forma correta, quem deve
participar dessa reunião.
(A) Toda a equipe Scrum.
(B) O Scrum Master e a Equipe de Desenvolvimento.
(C) A Equipe de Desenvolvimento.
(D) O Product Owner e a Equipe de Desenvolvimento.
(E) Qualquer pessoa que deseje participar.
A alternativa correta é a (C) A Equipe de Desenvolvimento.
A reunião diária do Scrum, também conhecida como Daily Scrum ou stand-up, é uma cerimônia realizada diariamente para promover a comunicação e a colaboração entre os membros da equipe de desenvolvimento. Essa reunião tem como objetivo principal sincronizar o trabalho e identificar eventuais impedimentos.
De acordo com o Scrum Guide, documento que descreve as práticas e os princípios do Scrum, a reunião diária deve ser realizada pela Equipe de Desenvolvimento, ou seja, os profissionais responsáveis pela realização do trabalho necessário para entregar as funcionalidades planejadas. A presença do Scrum Master e do Product Owner não é obrigatória, embora possam participar se desejarem.
Portanto, a alternativa correta é (C) A Equipe de Desenvolvimento.
por que as outras alternativas estão erradas?
Vamos analisar as outras alternativas e o porquê de estarem incorretas:
(A) Toda a equipe Scrum: Essa alternativa engloba o Scrum Master, o Product Owner e a Equipe de Desenvolvimento. No entanto, a reunião diária é especificamente destinada à Equipe de Desenvolvimento, pois é um momento de sincronização e colaboração entre os membros que realizam o trabalho técnico. O Scrum Master e o Product Owner podem participar, mas não são obrigados.
(B) O Scrum Master e a Equipe de Desenvolvimento: Nessa alternativa, o Product Owner não está incluído. Embora o Scrum Master possa participar da reunião diária, sua presença não é obrigatória. O Product Owner não é necessário para a reunião diária, pois sua principal responsabilidade é a gestão do Product Backlog, enquanto a reunião diária é focada na sincronização do trabalho técnico.
(D) O Product Owner e a Equipe de Desenvolvimento: Nessa alternativa, o Scrum Master não está incluído. Como mencionado anteriormente, o Scrum Master pode participar da reunião diária, mas sua presença não é obrigatória. O Product Owner também não é necessário, pois a reunião diária é voltada para a colaboração técnica e sincronização do trabalho.
(E) Qualquer pessoa que deseje participar: Essa alternativa está incorreta, pois a reunião diária é uma cerimônia do Scrum destinada especificamente à Equipe de Desenvolvimento. A participação de pessoas externas à equipe pode afetar a dinâmica e a eficácia da reunião.
Portanto, a única alternativa correta é a (C) A Equipe de Desenvolvimento, uma vez que a reunião diária é uma atividade da equipe técnica do Scrum.
quais dos assuntos a questão se enquadra?
Com base nos assuntos mencionados, a questão se enquadra principalmente em "Métodos ágeis". Mais especificamente, a questão aborda a reunião diária do Scrum, que é uma das cerimônias do Scrum, um framework ágil de gerenciamento de projetos.
Além disso, a questão também possui elementos relacionados à comunicação, engajamento, correção de rumos, mitigação de riscos e transparência, que são conceitos-chave dentro dos métodos ágeis.
Embora a questão mencione outros assuntos, como "Gerenciamento de projetos" e "Análise de negócios", eles não são o foco central da questão, que está voltada para a cerimônia da reunião diária no contexto do Scrum.
Para responder a questão, é necessário ter conhecimento sobre o Scrum, um framework ágil de gerenciamento de projetos. É importante entender os conceitos e princípios básicos do Scrum, bem como suas cerimônias, papéis e responsabilidades.
Além disso, é necessário saber que a reunião diária, também conhecida como Daily Scrum ou stand-up, é uma das cerimônias fundamentais do Scrum. Essa reunião tem como objetivo principal promover a comunicação e a colaboração entre os membros da equipe, sincronizar o trabalho realizado e identificar impedimentos.
Portanto, o conhecimento necessário para responder essa questão inclui:
Compreensão do Scrum como um framework ágil de gerenciamento de projetos.
Familiaridade com os princípios e conceitos básicos do Scrum.
Conhecimento das cerimônias do Scrum, incluindo a reunião diária.
Compreensão dos papéis envolvidos no Scrum, como o Scrum Master, o Product Owner e a Equipe de Desenvolvimento.
Conhecimento sobre a finalidade e os benefícios da reunião diária, incluindo sua importância na melhoria da comunicação, engajamento, correção de rumos, mitigação de riscos e transparência.
Com base nesse conhecimento, é possível identificar que a alternativa correta é a (C) A Equipe de Desenvolvimento, uma vez que a reunião diária é destinada especificamente a essa equipe, que é responsável pela realização do trabalho técnico no Scrum.
qual a dificuldade dessa questão?
A dificuldade dessa questão pode variar dependendo do conhecimento e da experiência do indivíduo com o framework Scrum. Para alguém que está familiarizado com o Scrum e suas cerimônias, essa questão pode ser considerada de nível fácil a moderado, pois requer o conhecimento básico sobre a reunião diária e os participantes envolvidos.
No entanto, para aqueles que não têm familiaridade com o Scrum ou com os métodos ágeis, a questão pode ser mais desafiadora. Nesse caso, é necessário adquirir o conhecimento sobre o Scrum, compreender seus princípios e cerimônias, e entender a importância da reunião diária para o sucesso do projeto. Essa aquisição de conhecimento pode tornar a questão mais difícil para quem está menos familiarizado com o assunto.
Portanto, a dificuldade da questão é relativa ao nível de conhecimento e experiência do indivíduo com o Scrum e com os métodos ágeis.

O que estudar sobre .net para o concurso da PROCERGS de 2025?

Que jogo é esse de bolinhas coloridas que todo mundo está falando?
